Kra é o seguinte utilizando int vc está trabalhando com primitivos do Java ou seja é o numero em si entao vc pode comparar com == q funciona. Agora utilizando Integer vc está trabalhando com um Objeto entao vc deve comparar utilizando o metodo equals() q este objeto possui.
x3.equals(x4);
ai sim ele vai retornar true, pois ele compara os valores atribuidos ao objeto ao invez de ocmparar a referencia de memoria.
ajudei ou confundi mais?
abraco!
C
channel
andrerios
fico grato com sua resposta .
eu não tenho duvida em usar o equals para comparar wrapper.
sei q vai funcionar perfeitamente se objects for do memso tipo e valor iqual. vai retornar true .
estou trabalhando com wrapper.
quero saber a diferença entre esses codigo .
pq acho q deveria imprimir false false .
pq estamos comparando objects diferentes .
Foxlol
O operador de igualdade (==) quanto utilizado em objetos verifica a referência dos mesmos, diferente de qnd utilizado com tipos primitivos.
No primeiro caso como vc naum usou o operador NEW, a JVM jogou os valores de x e x2 em um Pool(para melhorar a performance).
Jah no segundo caso vc utilizou NEW entaum vc disse a JVM que realmente criasse dois objetos distintos na heap(área de memória onde residem os objetos). Sendo assim naum possuem a mesma referência.
ziegfried
Usando o operador “new” em Wrappers, um novo objeto é carregado na memória (como o amigo de cima falou). Já utilizando uma atribuição simples (Integer x = 1), a JVM verifica se já existe o mesmo valor no pool do respectivo Wrapper (no caso, Integer), aumentando a performance.
Sami_Koivu
Complementando mais um pouquinho:
Quando você usa o recurso autoboxing (setando um valor primitivo ao tipo wrapper) você está implicitamente usando o método valueOf da classe Integer.
Ou seja,
Integerx=10;
é equivalente de
Integerx=Integer.valueOf(10);
E por motivos de desempenho, como criar objetos chega a ser uma operação "caro" em termos de desempenho quando muitos objetos estão sendo criados, as classes wrapper utilizam esquemas para evitar criação de novos objetos.
Veja por exemplo o método valueOf(int) da classe Integer:
publicstaticIntegervalueOf(inti){finalintoffset=128;if(i>=-128&&i<=127){// must cache returnIntegerCache.cache[i+offset];}returnnewInteger(i);}
Agora, se você fizer o teste com um valor que está fora esse range (-128 => 127) vai ver que o resultado será diferente.
[]s,
Sami
LPJava
é como a galera falou ai, você quando dar um new cria um novo objeto, mais ai no seu caso vc criou um objeto com o mesmo valor do outro, porem é outro objeto, em algum local da memoria. E nao tem nada ver com aquele primeiro que você criou por isso que retorna falso.
Imagine: “Você queria que alguém, falasse para outra pessoa que você é fulano, só por que está usando a mesma camisa?” Claro que não, a mesma coisa é ai, só pq um objeto tem o mesmo valor que outro objeto nao quer dizer que ele sao iguais = true.