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
thingol
Quando você faz “Boolean b4 = true”, na verdade o compilador faz o tal do “boxing” e converte seu código para o equivalente:
Booleanb4=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.