Pessoal, bom dia!
Estou estudando para a certificação Java e caí numa dúvida bastante elementar, é o seguinte:
Eu já entendi os conceitos de equals e == com as Strings, mas estou com uma dúvida a respeito dos exemplos da página 141 e 142 do Livro Certificação Sun para Programador Java 6. da Kathy Sierra.
Eis os exemplos:
Exemplo 1:
Integer i1, i2;
i1 = 10;
i2 = 10;
System.out.println((i1==i2)+ " " + (i1.equals(i2))); //Resultado: true, true
Até aí beleza, eu entendo mas quando chego a este exemplo:
Integer i3, i4;
i3 = 1000;
i4 = 1000;
System.out.println((i3==i4)+ " " + (i3.equals(i4))); //O resultado será false, true.
Eis o que a Kathy Sierra explica: Para economizar memória, duas instâncias dos seguintes objetos wrapper serão sempre == quando os seus valores primitivos forem o mesmo:
- Boolean
- Byte
- Character de \u000 até \u007f (7f é 127 em decimal)
- Short e Integer de -128 até 127
Achei esta explicação bastante confusa, pelo que entendi, para o operador == reconhecer as instâncias com uma classe Wrapper, o valor deve ser incluindo no intervalo entre -128 até 127. O Integer tem um intervalo entre -2^31 e 2^31 - 1. Mas para o operador referenciar para as mesmas intâncias, o Integer deve ter um valor entre -128 até 127.
Exemplo3:
Integer i3, i4;
i3 = 128;
i4 = 128;
System.out.println((i3==i4)+ " " + (i3.equals(i4))); //resultado: false, true.
Exemplo4:
Integer i3, i4;
i3 = 127;
i4 = 127;
System.out.println((i3==i4)+ " " + (i3.equals(i4))); //resultado: true, true.
Vocês acham que entendi certo ou estou errado :?:
esclarecedores.