Eventuali duplicati:
Weird Java Boxinginteri caching in Java
Recentemente ho visto una presentazione in cui è stato il seguente esempio di codice Java:
Integer a = 1000, b = 1000;
System.out.println(a == b); // false
Integer c = 100, d = 100;
System.out.println(c == d); // true
Ora sono un poco confuso. Capisco perché nel primo caso il risultato è "falso" - è perché Integer è un tipo di riferimento e i riferimenti di "a" e "b" sono diversi.
Ma perché nel secondo caso il risultato è "vero"?
Ho sentito un'opinione, che JVM memorizza nella cache oggetti per valori int da -128 a 127 per alcuni scopi di ottimizzazione. In questo modo, i riferimenti di "c" e "d" sono gli stessi.
Qualcuno può darmi ulteriori informazioni su questo comportamento? Voglio capire gli scopi di questa ottimizzazione. In quali casi viene aumentata la prestazione, ecc. Il riferimento ad alcune ricerche su questo problema sarà grande.
Si noti che non è possibile scrivere codice che dipende da questo comportamento poiché altri implementatori JVM/JDK non devono implementare questa ottimizzazione o, se lo desiderano, possono estendere l'intervallo dei valori memorizzati nella cache. – Behrang
Si noti che la memorizzazione nella cache non si applica agli oggetti creati in modo esplicito. I.e. 'Intero a = 1; Integer b = new Integer (1); System.out.println (a == b); // prints false' – ccpizza