Porque no Cenário 1 ele compara o valor primitivo e no Cenário 2 ele compara a referência do objeto? No Cenário 1 também não criei dois objetos Integers???
Nos dois casos você esta comparando a referencia mas os primitvos vem de um pool.
freakazoid
Obrigado pela resposta!
Sleipbr
Você está verificando se eles apontam para o mesmo local, no primeiro caso como ele vem de um pool, acredito que seja por causa disso que ele dar true; a variável aponta para o mesmo Integer(100), se você fizer o terceiro e assim sucessivamente ele vai apontar para o mesmo Integer(100). Agora no cenário 2 está sendo instanciado, os objetos são distintos, j1 aponta para um objeto, j2 aponta para outro objeto. Acredito que seja isso!
Sleipbr
Para comparar objetos você pode utilizar o metódo equals. Da seguinte maneira.
if(Obj1.equals(obj2)==true) {
do code
}
freakazoid
Sleipbr:
Para comparar objetos você pode utilizar o metódo equals. Da seguinte maneira.
if(Obj1.equals(obj2)==true) {
do code
}
O uso do equals é indiscutível, o que eu havia confundido era variável de referência a objeto com variável de referência a um primitivo.
Obrigado por complementar o post,
Abraço!
D
dennypg
Sleipbr:
Para comparar objetos você pode utilizar o metódo equals. Da seguinte maneira.
if(Obj1.equals(obj2)==true) {
do code
}
cara o comoando equals ja retorna um true, então não precisa fazer isso, só faz
Tente fazer essa mesma comparação fora do intervalo de -128 a 127, que aí tem chance de dar false.
D
dennypg
no caso é somente para byte né, que ele trabalha nesse intervalo, o cara estava usando Integer no exemplo.
natanaelv
no caso é somente para byte né, que ele trabalha nesse intervalo, o cara estava usando Integer no exemplo.
Quando você compara dois Integer nessa faixa valores citados pelo Bruno, é retornado true mesmo.
Isso funciona devido a caching de classes Wrapper feito pela VM.