Autoboxing Dúvida

package wrapper_boxing;

public class WrapperTest2 {

	public static void main(String[] args) {
		
		Boolean bool1 = new Boolean(true);
		Boolean bool2 = new Boolean(false);
		Boolean bool3 = new Boolean("false");
		Boolean bool4 = new Boolean(bool1);
		
		System.out.println(bool1.equals(bool4));
		System.out.println(bool2 == bool3);
		System.out.println(bool1 == bool4);
		
	}
}

1) The program will not compile because the creation of bool4 object will cause compilation error. 
2) The program will produce the output 'true false false'. 
3) The program will produce the output 'true true true'. 
4) The program will output 'true false true'. 

por que 2?

a resposta será 2 porq


//aqui imprime true ok(porque a classe Boolean faz a sobreposição do método equals)
System.out.println(bool1.equals(bool4));   
//aqui imprime false porque bool2 e bool3 são referências diferentes
System.out.println(bool2 == bool3);   
//aqui imprime false porque bool1 e bool4 tb são referências diferentes
System.out.println(bool1 == bool4);   

O método .equals compara valores, == compara as referências das variáveis em questão…

A linha abaixo está comparando valores, como bool1 é true e bool4 foi iniciado como true também, vai retornar (true = true) será true!

A linha abaixo compara as referências das variáveis, todas as variáveis foram inicializadas com new, logo nenhuma delas referencia o mesmo objeto!

A mesma coisa que acontece na linha acima!

Indiferentemente de bool1 ter sido passada como parâmetro para a inicialização de bool4, ela continua referenciando o seu objeto, bool4 referencia outro objeto!

deyvid, acho que a sua dúvida é com um código do tipo abaixo, correto?

[code] public class WrapperTest2 {

 public static void main(String[] args) {  
       
     Boolean bool1 = new Boolean(true);  
     Boolean bool2 = false;
     Boolean bool3 = false;
     Boolean bool4 = bool1;
       
     System.out.println(bool1.equals(bool4));  
     System.out.println(bool2 == bool3);  
     System.out.println(bool1 == bool4);  
       
 }  

}[/code]

Neste caso, vai imprimir true true true. No seu primeiro código, quando vc usa a palavra chave new, o Java SEMPRE vai criar um novo objeto. Caso a palavra chave new não for usada, ou seja, caso você passe um literal (true ou false) direto na variável ou passasse uma referência de outra variável, então a comparação com == seria true.

Fique atento também naqueles casos com Integer, Short, Long…

Ex: [code]
Integer i1 = 111;
Integer i2 = 111;

if(i1 == i2) System.out.println(“iguais!”);[/code]

Isso vai imprimir iguais! Mas, se fosse:

[code]
Integer i1 = 1111;
Integer i2 = 1111;

if(i1 == i2) System.out.println(“iguais!”);[/code]

Ai já não iria imprimir, pois isso passa de -128, +127 …

Acho que era com relação a isso a sua dúvida…