Bom… Pelos meus ensinamentos em Banco de dados, null == null é false mas em java null == null é true! Na minha condição IF tenho: if (atividadeContemAcaoList==null){. O atividadeContemAcaoList vem como nulo e se comparar com null isso retorna FALSE! Bom o que preciso é de algum jeito que se comparar o valor null == null retorne true e não false como está fazendo. Alguém pode me ajudar?
Debuga direitinho que você vai descobrir que o atividadeContemAcaoList não está null, caso contrário, sua JVM está com bug.
Outra dica, fica muito melhor escrever esse código da seguinte maneira:
public void mostrarSimNao(){
habilitaSimNao = (atividadeContemAcaoList == null);
}
lucasportela
O atividadeContemAcaoList vem como nulo ou vazio? Mostra o trecho que chama esse método para ficar mais claro.
mateuscs
Bom dia
augustovieira,
Pelo jeito que postou, esta correta a comparação.
A não ser que vc esteja instanciando o objeto atividadeContemAcaoList.
Por exemplo, se você definiu Object atividade = new Object(), ele não é mais nulo e sim vazio.
G
GilsonNunes
em DB
null == null é false?
no caso do DB, null não é nem =, nem <> d qq coisa.
null só é null.
augustovieira
Meu atividadeContemAcaoList está vindo como NULL, e se eu debugar essa comparação está como FALSE e não cai dentro do meu IF como eu queria que caisse!
mateuscs
augusto,
Poste seu codigo inteiro.
Creio que você está instanciando essa variavel em algum lugar.
lucasportela
GilsonNunes:
em DB
null == null é false?
no caso do DB, null não é nem =, nem <> d qq coisa.
null só é null.
Aproveitando o comentário…
null nem pode ser comparado com esses operadores no Oracle. Geralmente é ‘where x is null’. Outro detalhe que o null pode ser uma dor de cabeça em chaves únicas, com o null a chave única não é única, pois aceita vários null.
augustovieira
A idéia é o seguinte. No meu xhtml tenho 2 combos! um combo1 só será habilitado se o outro combo2 for selecionado, caso meu combo2 estiver na opção “selecione” o combo1 não será habilitado. Para isso criei esse método! está funcionando certinho porém na hora da comparação quando faço NULL com NULL ele retorna false. Ele está vindo com o valor certinho quando seleciono outra opção no combo2 mas quando seleciono novamente o “selecione”, ele compara null com null é false!
atividadeContemAcaoList é o meu Combo2 que quando está em “selecione” retorna NULL e na hora de comparar NULL==NULL isso é false!
lucasportela
qual o tipo desse objeto atividadeContemAcaoList? Apesar do nome sugestivo, tenho que perguntar porque eu já vi um método chamado commit() que não comitava.
tem como tirar um print da tela de debug mostrando o valor das variáveis no momento da comparação? Desculpe-me, mas só acredito vendo.
Você inseriu um elemento na lista com o valor null, mas a lista não está null. Ela está instanciada.
Pode notar que a lista tem o tamanho de 1 elemento, que o valor null. Se a lista estivesse vazia, o tamanho dela seria 0, se ela fosse null você nem ia saber o tamanho dela.
Você inseriu um elemento na lista com o valor null, mas a lista não está null. Ela está instanciada.
BINGO!
augustovieira
Solução?
lucasportela
Tomando como verdade na sua lógica que aquela condição tem que ser verdadeira… ou você NÃO adiciona o elemento na lista ou você percorre a lista e compara o valor do elemento.
Eu particularmente prefiro a 1ª opção por questão de desempenho, não precisa adicionar e nem percorrer. Mas só você sabe dizer qual é o melhor pro seu negócio. O que é bom pra mim as vezes não é o melhor pra sua lógica.
augustovieira
Eu tenho que ter aquele valor na lista! Só preciso saber algum jeito que creio que seja simple porém não estou conseguindo, de fazer essa minha comparação de NULL com NULL ser TRUE! Não é possível que nunca ninguém se deparou com a mesma situação!
lucasportela
se o elemento 0 da lista é nulo
if(atividadeContemAcaoList.get(0)==null)
ou percorrendo os elementos e verificando se tem algum não instanciado.
você tem que saber qual a regra, você tem uma lista, se é uma lista significa que serão vários elementos para inserir, então sugiro percorrer. Porém se vai ser uma lista de apenas um elemento, você deve rever isso e mudar para outro objeto que atenda sua regra, como por exemplo, um booleano.
rmendes08
O problema é que a sua lógica está errada. Naquele caso, você não tem que comparar se a lista é nula ou não, você tem que comparar se o valor selecionado no seu combobox é nulo.
augustovieira
Problema Resolvido, simples solução! Muito obrigado!!
if(atividadeContemAcaoList.get(0)==null)
lucasportela
O problema é que a sua lógica está errada. Naquele caso, você não tem que comparar se a lista é nula ou não, você tem que comparar se o valor selecionado no seu combobox é nulo.
augustovieira,
este problema foi resolvido, mas eu vejo isso como uma gambiarra. Você comparar um elemento fixo de uma lista não é algo normal, isso é sinal que tem que rever a lógica.
foi como o amigo falou, siga o conselho acima. Se baseie na lógica sugerida.
augustovieira
Na verdade não, no meu sistemas todos os selects tem como padrão o Selecione na posição 0, isso é feito dinâmicamente! Então não vejo como uma gambiarra! Eu precisava disso para fazer uns esquemas de habilita/desabilidar campos se ele estivesse com selecione ou não! e funcionou 100%! Obrigado novamente!