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'.
//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!
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…