Se juzga el valor nulo o nulo de la cadena
Durante el proceso de desarrollo, a menudo encuentro los siguientes usos incorrectos:
1. Uso de error 1:
if (name == "") {// haz algo} 2. Uso de error 2:
if (name.equals ("")) {// haz algo}
3. Uso de error tres:
if (! name.equals ("")) {// haz algo}
Expliquemos:
El uso del error 1 anterior es el error más probable que cometen los principiantes y es el menos probable que se descubra, porque su sintaxis en sí está bien, y el compilador Java no informa un error al compilar. Sin embargo, esta condición puede causar un error en el programa durante el tiempo de ejecución y nunca será cierta. En otras palabras, las declaraciones en el bloque if nunca se ejecutarán.
El uso 2 y el uso 3 mencionados anteriormente están escritos, incluidos errores que muchos beneficios de Java también son fáciles de cometer. ¿Por qué está mal? Tal vez estés desconcertado.
Sí, su escritura es correcta, pero faltan una condición de juicio nula. Imagínese, ¿qué pasará si name = null? La consecuencia es que su programa lanzará una excepción de NullPointerException, el sistema se suspenderá y ya no proporcionará servicios normales.
Por supuesto, si ha hecho un juicio nulo en nombre antes, la excepción es.
¡La forma correcta de escribirlo primero debe agregar la condición de nombre! = NULL, como:
if (name! = null &&! name.equals ("")) {// haz algo}o
if (! "". Equals (name)) {// escribe "" frente a él, para que no importa si el nombre es nulo o no, no habrá error. // hacer algo}
Aquí, damos un ejemplo simple:
TestNullorempty.java
prueba de clase pública {public static void main (string args []) {string value = null; testNullorEmpty (valor); valor = ""; testNullorEmpty (valor); valor = ""; testNullorEmpty (valor); valor = "hola me"; testNullorEmpty (valor); } static void testNullorEmpty (valor de cadena) {if (value == null) {system.out.println ("el valor es nulo"); } else if ("" .equals (valor)) {system.out.println ("el valor está en blanco pero no nulo"); } else {system.out.println ("valor es /" " + valor +" /""); } if (valor == "") {// suscripción de ng // no use esta escritura}}} Compilar ejecución:
c:/> javac testNullorempty.javac:/> java testNullorempty
El valor es nulo. El valor está en blanco pero no nulo. El valor es "" El valor es "¡Hola!"
Compare las direcciones de cadena iguales
paquete com; clase pública A { / ** * @param args * / public static void main (string [] args) {String a = "Hello"; Cadena b = "él"; Cadena c = a.substring (0, 2); System.out.println (B.Equals (c)); // true System.out.println (b == c); // false cadena d = nueva cadena ("hola"); System.out.println (d.equals (a)); // true System.out.println (d == a); // false string e = new StringBuilder ("Hello"). ToString (); System.out.println (e.equals (a)); // true System.out.println (e == a); // false System.out.println (e.equals (d)); // true System.out.println (e == d); // false cadena f = "Hola"; System.out.println (f.equals (a)); // true system.out.println (f == a); // true system.println (f == "hola"); // true system.out.println (f == "infierno"+"o"); // true String g = b+"llo"; System.out.println (g == f); // false cadena h = "he"+"llo"; System.out.println (h == f); // true}}Resumir:
1. La cadena de nueva es reasignar memoria, las cadenas no se comparten y no se comparten múltiples nuevos.
2. Las cadenas y las variables de cadena estática que están empalmadas o interceptadas no se comparten a través de funciones de cadena.
3. Hay dos situaciones para cadenas obtenidas por signos más.
Un "él"+"llo" es una cadena estática, que se comparte
B cadena a = "él"; a+"llo" no es una cadena estática, no se comparte