Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 03-04-2008, 11.24.58   #1
shadowDK
Senior Member
 
Registrato: 21-03-2008
Loc.: From Lugano (CH)...finally!
Messaggi: 330
shadowDK promette bene
Integer Java (SE 1.5 e 1.6) - anomalia (o no?)

Ciao a tutti...questo è un comportamento forse anomalo di queste due versioni di Java (fino alla 1.4 credo che un assegnamento del genere generasse un compile error)

public class Prova{
public static void main(String[] args){
Integer a1=128;
Integer a2=128;
/*1*/System.out.println(a1==a2);
/*2*/System.out.println(a1);
/*3*/System.out.println(a2);
}}

/*1*/ stampa true se a1 e a2 sono entrambi inizializzati a valori compresi tra -128 e 127 (caso strano, 256 valori, quelli ottenibili da un byte) false per valori esterni, ossia per valori minori di -128 e maggiori di 127...

qualcuno ha qualche idea della motivazione?

in aggiunta, dico che /*2*/ e /*3*/ stampano SEMPRE il valore inserito in dichiarazione, qualunque esso sia...

grazie!
shadowDK non è collegato   Rispondi citando
Vecchio 06-04-2008, 12.36.45   #2
Cacciavite
Senior Member
 
L'avatar di Cacciavite
 
Registrato: 06-02-2008
Messaggi: 260
Cacciavite promette bene
Mi sa devi usare l'operatore equals().
Cito dal mio libro:

Integer i1 = new Integer(12);
Integer i2 = new Integer(12);

Il test i1==i2 darà esito false, in quanto le due variabili fanno riferimento a due oggetti distinti; al contrario, l'espressione i1.equals(i2) risulterà vera, dal momento che i due oggetti hanno lo stesso identico stato.
L'operatore == permette di verificare l'identità tra due refernece, che si verifica nel caso in cui essi facciano riferimento allo stesso oggetto in memoria.

Poi non so... è da poco che uso Java, ma credo sia così.
___________________________________

- "Che vitaccia!" disse il Cacciavite.
- Non discutere mai con un idiota... ti trascina al suo livello e ti batte con l'esperienza.
Cacciavite non è collegato   Rispondi citando
Vecchio 07-04-2008, 09.50.26   #3
shadowDK
Senior Member
 
Registrato: 21-03-2008
Loc.: From Lugano (CH)...finally!
Messaggi: 330
shadowDK promette bene
Visto che ti sei interessato ti dò la risposta tecnica precisa (più omeno, su alcune cose non mi sono informato ancora con estrema precisione)...avviso però che è abbastanza lunga...
allora, il confronto == tra gli oggetti confronta i puntatori...ossia, due oggetti risultano uguali con queste ocnfronto se e solo se puntano alla stessa area di memoria.. il confronto con equals, invece, confronta il valore (è il confronto di uguaglianza inteso nel senso utente)...
ora, cosa succede quando io scrivo una dichiarazione del tipo Integer i = 100? ecco, viene attivata una "java integer cache" (che ancora non so di preciso cos'è) che dovrebbe essere grande 1 byte...in pratica, avvengono quindi due comportamenti diversi:
  1. per i numeri compresi nell'intervallo -128;127 estremi inclusi sono memorizzati in tale cache, pertanto a valore uguale corrisponde cella di memoria uguale e quindi anche il confronto == "funziona" nel senso utente;
  2. per valori esterni a questo intervallo (non inseriti nella cache) il confronto == funziona invece nel modo classico per gli oggetti, e quindi il risultato del confronto non è determinabile a priori (può benissimo succedere che a valore uguale corrisponda cella di memoria uguale, ma non è assolutamente la regola,anzi il 99,9% delle volte non succede)
Comunque, come dice il tuo libro, tra oggetti NON è mai opportuno usare il confronto ==...si DEVE usare sempre usare l'equals! La mia era solo una curiosità!
Altra nota: l'inizializzazione
Codice:
Oggetto o = valore;
restituisce spesso un errore in fase di compilazione, è ammessa (credo) solo per i valori numerici (Integer, Real, Double ecc) e per le stringhe (String)...
shadowDK non è collegato   Rispondi citando
Vecchio 07-04-2008, 11.16.12   #4
Cacciavite
Senior Member
 
L'avatar di Cacciavite
 
Registrato: 06-02-2008
Messaggi: 260
Cacciavite promette bene
Ok, buono a sapersi.
Sto Java è più ingarbugliato di non so che...
___________________________________

- "Che vitaccia!" disse il Cacciavite.
- Non discutere mai con un idiota... ti trascina al suo livello e ti batte con l'esperienza.
Cacciavite non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Problemi Java. Armando@56 Software applicativo 4 19-03-2008 15.27.05
Applicazione java pronta per l'uso juggler Programmazione 1 18-12-2006 21.11.18
[NEWS] Java diventa open source! UG0_BOSS Segnalazioni Web 2 14-11-2006 15.27.14
Java 5.0 upd. 10 / 6 RC Thor Archivio News Web 10 14-11-2006 12.56.18
[LINUX] windows media player per linux sacarde Linux e altri Sistemi Operativi 35 19-08-2006 11.55.31

Orario GMT +2. Ora sono le: 19.14.32.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.