|
| 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 » | |
![]() |
#1 |
Senior Member
Registrato: 21-03-2008
Loc.: From Lugano (CH)...finally!
Messaggi: 330
![]() |
Integer Java (SE 1.5 e 1.6) - anomalia (o no?)
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! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Registrato: 06-02-2008
Messaggi: 260
![]() |
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. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Registrato: 21-03-2008
Loc.: From Lugano (CH)...finally!
Messaggi: 330
![]() |
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:
Altra nota: l'inizializzazione Codice:
Oggetto o = valore; |
![]() |
![]() |
![]() |
#4 |
Senior Member
Registrato: 06-02-2008
Messaggi: 260
![]() |
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. |
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
|
|
![]() |
||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Problemi Java. | Armando@56 | Software applicativo | 4 | 19-03-2008 16.27.05 |
Applicazione java pronta per l'uso | juggler | Programmazione | 1 | 18-12-2006 22.11.18 |
[NEWS] Java diventa open source! | UG0_BOSS | Segnalazioni Web | 2 | 14-11-2006 16.27.14 |
Java 5.0 upd. 10 / 6 RC | Thor | Archivio News Web | 10 | 14-11-2006 13.56.18 |
[LINUX] windows media player per linux | sacarde | Linux e altri Sistemi Operativi | 35 | 19-08-2006 12.55.31 |