Comparando Referências " == "

4 respostas
J

Dado código:

public class etattva6 { public static void main(String[] args) { Boolean b1 = new Boolean(true); Boolean b2 = new Boolean(true); boolean b3 = true; Boolean b4 = true; System.out.println(b1==b2); System.out.println(b1==b3); System.out.println(b3 == b4); System.out.println(b1 == b4); } }

tenho o resultado: false true true false
Minha pergunta é, se b1==b3 = true por que b1 == b4 = false???

O resto blz…

4 Respostas

RaulCarlin

Boolean b4 = true é a mesma coisa que Boolean b4 = new Boolean(true) por causa do autoboxing do 1.5, me corrijam se estiver errado… :oops:

T

Quando você faz “Boolean b4 = true”, na verdade o compilador faz o tal do “boxing” e converte seu código para o equivalente:

Boolean b4 = Boolean.valueOf (true);

E como você deve ter percebido, Boolean.valueOf(true) retorna um objeto fixo, chamado Boolean.TRUE. Esse objeto é único para cada JVM.
Quando você faz Boolean b1 = new Boolean (true), você está criando um objeto novinho em folha do tipo java.lang.Boolean cujo booleanValue é true.
Esse objeto novinho em folha, como você deve ter percebido, tem de ser diferente do objeto Boolean.TRUE que já está predefinido.

victorwss

Isso daí na verdade é pegadinha de auto(un)boxing disfarçada de pegadinha de ==.

Primeiro o b3 é o único primitivo. O compilador transforma o b4 nisso:

Daí embora b1 e b4 sejam ambos objetos que contenham o valor true, são objetos diferentes (isso ocorre por causa do new do b1). Daí o == falha.

O (b1==b3) compara um tipo primitivo com um objeto. O compilador coloca (b1.booleanValue() == b3). E daí o resultado é true.

J

Perfeito… valeu ai a todos…

Criado 30 de abril de 2008
Ultima resposta 30 de abr. de 2008
Respostas 4
Participantes 4