pq os objetos ocupam a mesma posiçãode memoria na situação 1 e 2 da linha 10 e 12 com I e J velendo 2 e substituindo por valores acima de 255 não ocupam a mesma posição
Não me recordo muito bem, mas quando estava estudando para certificação, li algo sobre a JVM utilizar o mesmo objeto do tipo Integer para valores até 128 (ou algo assim), para poder economizar memória.
Ou seja,
// numA e numB apontam para o mesmo endereço de memória.....IntegernumA=5;IntegernumB=5;if(numA==numB)System.out.println("Iguais...");// numA e numB apontam para endereços de memória diferentes.....numA=255;numB=255;if(numA==numB)System.out.println("Iguais novamente...");// isso não imprime
Posso estar completamente errado…mas creio que seja isso mesmo!
ViniGodoy
É isso mesmo. Existe um cache para objetos de valor até 255.
Por isso, é sempre preferível converter números para Integer usando valueOf (ou autoboxing, que usa valueof) do que usando new Integer(). No último caso, você está dizendo explicitamente que não quer usar o cache.
TangZero
Se eu tivesse errado, iria ficar com uma vergonhaaaaaaaaaa.
E
ediel_xadrez
não entendi
é 128 ou 255???
alucardeck
ediel_xadrez:
não entendi
é 128 ou 255???
255
TangZero
Não estava bem certo quanto ao valor. Mas conhecia a teoria.
ViniGodoy
O cache é de -128 até 127. Exatamente um byte (por isso eu confundi, pensei em unsigned).
Pode testar vc mesmo:
public class Teste {
public static void main(String args[]) {
for (int i = -129; i < 129; i++) {
Integer x = i;
Integer y = i;
System.out.println(i + ": " + (y == x));
}
}
}