Como posso verificar uma string em relação a null em java? estou usando
stringname.equalsignorecase(null)
mas não está funcionando.
string == null
compara se o objeto é nulo. string.equals("foo")
compara o valor dentro desse objeto. string == "foo"
nem sempre funciona, porque você está tentando ver se os objetos são os mesmos, não os valores que eles representam.
Resposta mais longa:
Se você tentar fazer isso, não funcionará, pois você descobriu:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
A razão é que foo é nulo, então ele não sabe o que é .equals; não há nenhum objeto a partir do qual .equals possa ser chamado.
O que você provavelmente queria era:
String foo = null;
if (foo == null) {
// That will work.
}
A maneira típica de se proteger contra um null ao lidar com Strings é:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
Dessa forma, se foo for nulo, ele não avalia a segunda metade da condicional e está tudo bem.
A maneira mais fácil, se você estiver usando um literal String (em vez de uma variável), é:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
Se você quiser contornar isso, o Apache Commons tem uma classe - StringUtils - que fornece operações String seguras para nulos.
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Outra resposta estava brincando e disse que você deveria fazer o seguinte:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
Por favor, não faça isso. Você só deve lançar exceções para erros excepcionais; se você está esperando um valor nulo, deve verificar com antecedência e não deixá-lo lançar a exceção.
Na minha cabeça, existem duas razões para isso. Primeiro, as exceções são lentas; a verificação em relação a nulo é rápida, mas quando a JVM lança uma exceção, leva muito tempo. Em segundo lugar, o código é muito mais fácil de ler e manter se você apenas verificar o ponteiro nulo com antecedência.
não vai funcionar?
fonte
equals()
se quiser comparar valores . Mas se quiser verificar se uma variável énull
, use==
.Claro que funciona. Você está perdendo uma parte vital do código. Você só precisa fazer assim:
;)
fonte
Use o método TextUtils se você estiver trabalhando no Android.
TextUtils.isEmpty (str) : Retorna verdadeiro se a string for nula ou de comprimento 0. Parâmetros: str a string a ser examinada Retorna: verdadeiro se str for nulo ou comprimento zero
Abaixo está o código-fonte deste método. Você pode usar direclty.
fonte
Se olharmos para a implementação do método equalsIgnoreCase, encontramos esta parte:
Portanto, ele sempre retornará
false
se o argumento fornull
. E isso está obviamente certo, porque o único caso em que ele deve retornartrue
é quando equalsIgnoreCase foi invocado em umnull String
, masdefinitivamente resultará em um NullPointerException.
Portanto, os métodos equals não são projetados para testar se um objeto é nulo, apenas porque você não pode invocá-los
null
.fonte
Isso parece um pouco estranho, mas ...
Nunca tive problemas ao fazer isso, além de ser uma maneira mais segura de verificar, evitando exceções de pontos nulos em potencial.
fonte
Não tenho certeza do que havia de errado com a resposta do MYYN.
A verificação nula acima é muito boa.
Se você está tentando verificar se uma referência de String é igual (ignorando maiúsculas e minúsculas) a outra string que você sabe que não é uma referência nula, faça algo assim:
Se houver qualquer dúvida se você tem ou não referências nulas para ambas as Strings que está comparando, você precisará verificar se há uma referência nula em pelo menos uma delas para evitar a possibilidade de um NullPointerException.
fonte
Se sua string tiver valor "nulo", você pode usar
fonte
importe na sua aula
então use-o, os dois retornarão verdadeiro
fonte
Você pode verificar com String == null
Isso funciona para mim
fonte
Claro, user351809
stringname.equalsignorecase(null)
lançará NullPointerException.Veja, você tem um objeto string
stringname
, que segue 2 condições possíveis: -stringname
tem um valor de string não nulo (digamos "computador"):Seu código funcionará bem, pois assume a forma
"computer".equalsignorecase(null)
e você obtém a resposta esperada como
false
.stringname
tem umnull
valor:aqui seu código ficará travado, pois
null.equalsignorecase(null)
No entanto, parece bom à primeira vista e você pode esperar uma resposta
true
, pois ,mas,
null
não é um objeto que pode executar oequalsignorecase()
método.Portanto, você obtém a exceção devido ao caso 2.
O que eu sugiro que você simplesmente use
stringname == null
fonte
Método simples:
fonte
Se o
value
retornado for nulo, use:Às vezes, para verificar o valor nulo,
if(value == null)
em java, pode não ser verdadeiro mesmo que a string seja nula.fonte
if(value.isEmpty())
dáNullPointerException
. Neste caso é melhor usarif(value == null)
Com Java 7 você pode usar
que retornará
true
se ambos os parâmetros foremnull
.fonte
Sei que isso foi respondido há muito tempo, mas não vi isso postado, então pensei em compartilhar o que faço. Isso não é particularmente bom para a legibilidade do código, mas se você tiver que fazer uma série de verificações de nulos, gosto de usar:
Neste exemplo, trim é chamado na string, o que lançaria um NPE se a string fosse nula ou espaços, mas na mesma linha, você pode verificar se há nulo ou em branco para não acabar com uma tonelada de (mais ) difícil de formatar se blocos.
fonte
Se bem entendi, isso deve bastar:
fonte
Bem, a última vez que alguém fez essa pergunta boba, a resposta foi:
Essa "correção" apenas esconde o problema maior de como
null
se torna,"null"
em primeiro lugar.fonte
Existem duas maneiras de fazer isso .. Diga String == null ou string.equals () ..
Verifique este exemplo ... Aqui está outro exemplo de versão de atalho de If Else ..
fonte