Duvida comparação Boolean

3 respostas
R

Se eu tenho um objeto, exemplo:

class Objeto
{
  public Boolean variavel()
  {
    return null;
  }
}

if( new Objeto().variavel() )
{
...
}

Da NullPointerException ao fazer uma comparação com um IF de uma variavel booleana nula.

Fazendo mais alguns testes verifiquei o seguinte comportamento no construtor da classe Boolean:

public class TesteBoolean 
{
	
	static class Teste
	{
		private Boolean variavel;
		
		public Teste(Boolean variavel)
		{
			this.variavel = variavel;
		}
		
		public Boolean getVariavel()
		{
			return variavel;
		}
	}
	
	public static void main(String[] args) 
	{
		Teste a = new Teste(null);
		
		System.out.println(new Boolean(null));
		
		System.out.println("Valor de a.getVariavel() = " + a.getVariavel());
		System.out.println(new Boolean(a.getVariavel()));
	}

}

Output:

false
Valor de a.getVariavel() = null
Exception in thread "main" java.lang.NullPointerException
at TesteBoolean.main(TesteBoolean.java:27)

Se eu dou um new Boolean(null) com o null explicito o valor fica como false.
Mas, se o null vem de um objeto ocorre NullPointerException! Por que isso?

3 Respostas

anderson_lr

Rafael, pelo que eu sei, a classe “Boolean” tem um construtor que recebe um “boolean” primitivo, e quando um “boolean” primitivo recebe um valor “null”, na verdade ele seta como false. Esse é o padrão do boolean primitivo mesmo. Já no caso do seu método “public Boolen variavel()”, esse método deve retornar uma instância da classe “Boolean”, e como está retornando null, é lançada a exceção NullPointerException, pois você está tentando acessar uma instância que na verdade não existe na memória da JVM.

pmlm

A classe Boolean tem dois construtores:

Boolean (String s)
Boolean (boolean value)

System.out.println(new Boolean(null)); Neste caso é usado o construtor Boolean (String s). Como s é null, o objecto criado fica com o valor false.

System.out.println(new Boolean(a.getVariavel()));Neste caso estás a passar um Boolean como argumento do construtor. Como não existe construtor com Boolean, ele é esperto e converte automaticamente para o tipo primitivo boolean e aí é que vem o problema. O tipo primitivo boolean não aceita null, e ocorre o NullPointerException.

pmlm

Com boolean primitivo não é sequer possivel fazer set de null. Dá erro de compilação.

Criado 21 de setembro de 2011
Ultima resposta 21 de set. de 2011
Respostas 3
Participantes 3