No non dovrebbe:
Integer i1 = 128;
Integer j1 = 128;
Autoboxing provoca due oggetti Integer distinti da creare nella realizzazione di Java che si sta utilizzando.
Se i valori interi erano compresi nell'intervallo compreso tra -128 e 127, il JLS indica che verrà utilizzato lo stesso oggetto intero; vedi JLS 1.5.7. Tuttavia, il JLS fa non richiede che i1
e i2
debbano avere valori diversi al di fuori di tale intervallo. Effettivamente la seguente discussione nel JLS dice questo:
Idealmente, il pugilato di un dato valore primitivo p, darebbe sempre un riferimento identico. In pratica, questo potrebbe non essere fattibile utilizzando le tecniche di implementazione esistenti. Le regole di cui sopra sono un compromesso pragmatico. La clausola finale sopra richiede che determinati valori comuni siano sempre racchiusi in oggetti indistinguibili. L'implementazione può memorizzarli in cache, pigramente o impazientemente.
Per altri valori, questa formulazione non consente alcuna ipotesi sull'identità dei valori inseriti nella parte del programmatore. Ciò consentirebbe (ma non richiederà) la condivisione di alcuni o tutti questi riferimenti.
Ciò garantisce che, nei casi più comuni, il comportamento sarà quello desiderato, senza imporre una penalità di prestazioni eccessive, in particolare su dispositivi di piccole dimensioni. Ad esempio, meno implementazioni a memoria limitata potrebbero memorizzare nella cache tutti i caratteri e i corti, nonché interi e lunghi nell'intervallo di -32K - + 32K.
fonte
2010-03-23 13:00:55
una tale domanda specifica, hmm, sospettoso – Will
@Will Ho visto la stessa domanda in un libro SCJP –
Scommetto che restituisce falso, vero, falso, vero invece di vero, vero, falso, vero –