Comparando booleans e wrappers

4 respostas
G

Não entendi pq b1==b3 dá true e b1==b4 dá false.

public class Boxing3 { 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);//f System.out.println(b1==b3);//t System.out.println(b3 == b4);//t System.out.println(b1 == b4);//f } }

Já entendi…

boolean b3 = true;
Boolean b4 = true;

4 Respostas

B

“b4” é autoboxed, portanto é um objeto à parte.
“b1==b4” somente retornaria “true” caso fizessem referência ao mesmo objeto.

“b1==b3” retorna “true” pois ao comparar um tipo Wrapper a um primitivo, o Wrapper é unboxed e neste caso se comportam como em uma comparação entre dois booleans primitivos de valor “true”.

T

Isso cai em provas de certificação? Cruz credo. Não caiu nada parecido na minha.

De qualquer maneira, ao compararmos b1 e b3, o compilador faz o seguinte:
a) b1 é convertido para um boolean (primitivo), valendo true
b) b1 (primitivo, true) == b3 (primitivo, true) retorna true.

Ao compararmos b1 e b4, o compilador faz o seguinte:
a) b1 e b4 são ambos java.lang.Boolean (wrappers), portanto podem ser comparados diretamente, como objetos.
b) b1 é um novo objeto Boolean (criado com “new”), enquanto escrever “Boolean b4 = true” é equivalente a escrever “Boolean b4 = Boolean.TRUE”, ou seja, você pega um dos dois objetos Boolean.FALSE ou Boolean.TRUE que são estáticos e já foram criados pela JVM antes de você iniciar seu programa.
Então b1 não é o mesmo objeto que b4, portanto b1 == b4 retorna false.

LPJava

veja se o post a seguir ajuda a entender wrapper.

wrapper

flw! abraco

G

Obrigado pela matéria Camilo, acompanho bastante seu blog… assim como o do Juliano, já estão no favoritos! ehhe

Abraços

Criado 8 de maio de 2009
Ultima resposta 10 de mai. de 2009
Respostas 4
Participantes 4