2010-05-27 7 views

Respuesta

24
s == null 

¿no funciona?

+3

@ k38: "solo" tiene que usar 'igual()' si quiere comparar ** valores **. Pero si quiere verificar si una variable es 'nula', use' == '. –

15

Claro que funciona. Te estás perdiendo una parte vital del código. Sólo tiene que hacer como esto:

boolean isNull = false; 
try { 
    stringname.equalsIgnoreCase(null); 
} catch (NullPointerException npe) { 
    isNull = true; 
} 

;)

+32

+1 - por ser ** MALVADO **. –

+13

Si te leen hasta aquí, ten en cuenta que @aioobe está bromeando; no deberías hacerlo de esta manera. –

+5

-1 por ser malvado – chburd

3

no estoy seguro de lo que estaba mal con la respuesta de la MYYN.

if (yourString != null) { 
    //do fun stuff with yourString here 
} 

La comprobación nula anterior está bastante bien.

Si usted está tratando de comprobar si una cadena de referencia es igual (caso ignorando) a otra cadena que sabe no es una referencia nula, a continuación, hacer algo como esto:

String x = "this is not a null reference" 
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull)) { 
    //do fun stuff 
} 

Si hay si tiene dudas sobre si tiene referencias nulas para las dos cadenas que está comparando, deberá verificar si hay una referencia nula en al menos una de ellas para evitar la posibilidad de una NullPointerException.

5

Si nos fijamos en la implementación del método equalsIgnoreCase, nos encontramos con esta parte:

if (string == null || count != string.count) { 
    return false; 
} 

Por lo que siempre regresará false si el argumento es null. Y esto es obviamente correcto, porque el único caso en el que debe devolver true es cuando equalsIgnoreCase se invocó en un null String, pero

String nullString = null; 
nullString.equalsIgnoreCase(null); 

sin duda resultará en una NullPointerException.

Por lo tanto, los métodos iguales no están diseñados para probar si un objeto es nulo, simplemente porque no puede invocarlos en null.

-1

Bueno, la última vez que alguien hizo esta pregunta tonta, la respuesta fue:

someString.equals("null") 

Esta "solución" sólo oculta el mayor problema de cómo se convierte en null"null", en primer lugar, sin embargo.

+0

No es así, así que esto no es una solución y no es una respuesta útil. –

+0

Me gustaría ser el primero en decir: "wat" –

+0

esto no responde la pregunta –

138

string == null compara si el objeto es nulo. string.equals("foo") compara el valor dentro de ese objeto. string == "foo" no siempre funciona, porque está tratando de ver si los objetos son los mismos, no los valores que representan.respuesta


más larga:

Si intenta esto, no va a funcionar, como lo has encontrado:

String foo = null; 
if (foo.equals(null)) { 
    // That fails every time. 
} 

La razón es que foo es nula, por lo que no hace saber lo que es .equals; no hay objeto allí para que se llame a los iguales.

Lo que probablemente quería era:

String foo = null; 
if (foo == null) { 
    // That will work. 
} 

La forma típica de protegerse a sí mismo contra un nulo cuando se trata de cadenas es:

String foo = null; 
String bar = "Some string"; 
... 
if (foo != null && foo.equals(bar)) { 
    // Do something here. 
} 

esta manera, si foo fue nula, que doesn' t evalúa la segunda mitad del condicional, y todo está bien.

La forma más fácil, si está usando una cadena literal (en lugar de una variable), es la siguiente:

String foo = null; 
... 
if ("some String".equals(foo)) { 
    // Do something here. 
} 

Si quiere evitar que, Apache Commons tiene una clase - StringUtils - que proporciona operaciones de cadena null-safe.

if (StringUtils.equals(foo, bar)) { 
    // Do something here. 
} 

Otra respuesta era una broma, y ​​dijo que debe hacer esto:

boolean isNull = false; 
try { 
    stringname.equalsIgnoreCase(null); 
} catch (NullPointerException npe) { 
    isNull = true; 
} 

favor, no hagas eso. Solo debe lanzar excepciones para errores que son excepcionales; Si está esperando un nulo, debe verificarlo con anticipación y no dejar que arroje la excepción.

En mi cabeza, hay dos razones para esto. Primero, las excepciones son lentas; Comprobar contra null es rápido, pero cuando la JVM lanza una excepción, lleva mucho tiempo. En segundo lugar, el código es mucho más fácil de leer y mantener si solo comprueba el puntero nulo con anticipación.

+2

te perdiste la versión de Yoda, también funciona siempre: if ("foo" .equalsIgnoreCase (cadena)) –

+0

@Omry; buena captura, agregará eso. –

+2

Buena explicación útil. Gracias por jugar bien. –

4

Esto parece un poco extraño, pero ...

stringName == null || "".equals(stringName) 

nunca tuvimos ningún problema hacerlo de esta manera, además de que es una forma más segura para comprobar y evitar posibles excepciones de punto nulo.

+0

cuidado con NullPointer en este caso la segunda condición debe ser primero. – Pawan

2

Si la cadena tiene un valor "nulo", entonces usted puede utilizar

if(null == stringName){ 

    [code] 

} 

else 

[Error Msg] 
+3

¿por qué null == stringName y no stringName == null? Supongo que no hay diferencia, pero por qué es preferible (y lo he visto mucho). Mi preferencia es leer la orden LTR tan stringName == null pero quiero saber qué piensan los demás. –

+6

Normalmente, en comparación, coloca la variable en el lado derecho, para que no inicialice la variable en caso de error: null = stringName produce un error de compilación, mientras que stringName = null sería posible – Sarajog

+3

No es "normal" hacer esto en absoluto y muchas personas lo prohíben expresamente ya que no es legible de forma natural para alguien que lee el código base. – RichieHH

0

que dan cuenta de esto fue respondida hace mucho tiempo, pero no he visto este escrito, así que pensé en compartir lo Hago. Esto no es particularmente bueno para la legibilidad del código, pero si va a tener que hacer una serie de comprobaciones nulos, me gusta usar:

String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim(); 

En este ejemplo, el ajuste se llama en la cadena, que arrojaría un NPE si el hilo era nulo o espacios, pero en la misma línea, puede verificar nulo o en blanco para no terminar con una tonelada de bloques (más) difíciles de formatear.

+0

¿Qué quiere decir con verificar nulo o en blanco? Solo está buscando null aquí. El espacio en blanco es uno de los posibles retornos de "COND? A: B"; construir, ¿verdad? –

1

Por supuesto user351809, stringname.equalsignorecase(null) lanzará NullPointerException.
Sede, que tiene un objeto de cadena stringname, que sigue a 2 condiciones posibles: -

  1. stringname tiene un cierto valor cadena no nula (por ejemplo "ordenador"):
    Su código no tendrán ningún problema, ya que toma el formulario
    "computer".equalsignorecase(null)
    y obtiene la respuesta esperada como false.
  2. stringname tiene un valor null:
    Aquí el código se quedan atascados, como
    null.equalsignorecase(null)
    Sin embargo, parece bueno a primera vista y es posible que la esperanza de que la respuesta true,
    pero, null no es un objeto que puede ejecuta el método equalsignorecase().

Por lo tanto, se obtiene la excepción debido al caso 2.
Lo que yo sugiero que es simplemente usar stringname == null

-1

Hay dos maneras de hacer it..Say cadena == null o string.equals() ..

public class IfElse { 

    public int ifElseTesting(String a){ 
     //return null; 
     return (a== null)? 0: a.length(); 
    } 

} 

public class ShortCutifElseTesting { 

    public static void main(String[] args) { 

     Scanner scanner=new Scanner(System.in); 
     System.out.println("enter the string please:"); 
     String a=scanner.nextLine(); 
     /* 
     if (a.equals(null)){ 
      System.out.println("you are not correct"); 
     } 
     else if(a.equals("bangladesh")){ 
      System.out.println("you are right"); 
     } 
     else 
      System.out.println("succesful tested"); 

     */ 
     IfElse ie=new IfElse(); 
     int result=ie.ifElseTesting(a); 
     System.out.println(result); 

    } 

} 

Marque esta example..Here es otro ejemplo de la versión corta de lo demás .. Si

+1

¡No! .equals() no se debe usar con un objeto potencialmente nulo, por lo que la explicación introductoria es errónea. Y el resto de esta respuesta parece inútil y no relacionada con la pregunta formulada. –

8

Usar el método TextUtils.

TextUtils.isEmpty (str): Devuelve verdadero si la cadena es nula o 0-length. Parámetros: str la cadena para ser examinados devoluciones: cierto si str es nulo o cero longitud

if(TextUtils.isEmpty(str)) { 
     // str is null or lenght is 0 
    } 

A continuación se muestra source code de este método

/** 
    * Returns true if the string is null or 0-length. 
    * @param str the string to be examined 
    * @return true if str is null or zero length 
    */ 
    public static boolean isEmpty(CharSequence str) { 
     if (str == null || str.length() == 0) 
      return true; 
     else 
      return false; 
    } 
0

importación en su clase

import org.apache.commons.lang.StringUtils; 

luego úsala, ambas devolverán verdadera

System.out.println(StringUtils.isEmpty("")); 
System.out.println(StringUtils.isEmpty(null)); 
2

Usted puede consultar con cuerdas == null

Esto funciona para mí

String foo = null; 
    if(foo == null){ 
     System.out.println("String is null"); 
    } 
1

Método sencillo:

public static boolean isBlank(String value) { 
    return (value == null || value.equals("") || value.equals("null") || value.trim().equals("")); 
} 
+0

¡Muy bien, hermano! –

1

Si el value devuelto es nulo, utilice:

if(value.isEmpty()); 

En algún momento para comprobar nulo, if(value == null) en java, es posible que no se cumpla, incluso si el String es nulo.

+1

Usando Scala (con Java) 'if (value.isEmpty())' da 'NullPointerException'. En este caso es mejor usar 'if (value == null)' –

+0

Esto definitivamente es incorrecto, ya que siempre arrojará NPE si es nulo. – Roger

Cuestiones relacionadas