Boa noite…
estou lendo o livro da kathys sierra (scpj 5) e quis fazer o teste na minha máquina.
Porque o código abaixo produz a seguinte saída?
public class teste {
public static void main(String[] args) {
Integer a = 200;
Integer b = 200;
Integer c = 10;
Integer d = 10;
if(a == b){
System.out.println("a e b iguais");
}
if(a != b){
System.out.println("a e b diferentes");
}
if(c == d){
System.out.println("c e d iguais");
}
if(c != d){
System.out.println("c e d diferentes");
}
}
}
Resultado:
a e b diferentes
c e d iguais
Porra sinistro… Eu realmente n sei, como vc sou novato e estou muito curioso…
Agora eu fiz um teste e tipei as variaveis com o tipo primitivo int e deu certo… Parece que é alguma coisa com a classe Integer…
Vamos aguardar pra ver se alguém ajuda…
Abraços!
Então cara, queria saber porque que o valor do Integer ta influindo.
To no aguardo de algum sábio ai! =]
abraços Valeu!
No Java, os números que cabem no range do tipo byte (-128 a 127) apontam para o mesmo local na pilha, enquanto que valores superiores ao valores que cabem em 1 tipo byte são armazenados na pilha em lugares diferentes. Repare que o autoboxing do java está colocando o literal 200 em um objeto do tipo Integer, quando a é comparado com b estamos comparando referências que apontam para lugares diferentes. Integers acima do range de 1 byte deveriam ser comparados com equals, a.equals(b)!
Espero ter esclarecido!
Olá Henrique e Fernando,
isto acontece por que a máquina virtual pode utilizar um pool de objetos para obter otimizações.
No caso de Integer’s, os objetos que estão entre -128 a 127 são armazenados no pool (quando declarados da forma literal, ou seja, sem o new). Tome cuidado pois esse pool é um recurso da maquina virtual da Sun, e existe a possibilidade de máquinas virtuais de outros fornecedores não utilizarem um pool neste caso.
De uma olhada nos links abaixo para saber mais:
http://www.owasp.org/index.php/Java_gotchas
Espero ter ajudado com sua dúvida.
Muito Obrigado pelas respostas! Consegui entender sim!
Um abraço!
Henrique
Vlw galera!! Obrigado pela dica!