validar para metodo manejo length funciones espacios eliminar declarar caracteres cadenas blanco array java string null equals referenceequals

para - Diferencia entre cadenas de Java nulas y vacías("")



metodo para eliminar espacios en blanco java (13)

La cadena vacía es distinta de una referencia nula porque en un lenguaje de programación orientado a objetos, una referencia nula a un tipo de cadena no apunta a un objeto de cadena y provocará un error si intentara realizar cualquier operación en él. La cadena vacía sigue siendo una cadena sobre la cual se pueden intentar operaciones de cadena.

Del artículo de Wikipedia en cadena vacía .

¿Cuál es la diferencia entre null y the "" (cadena vacía)?

He escrito un código simple:

String a = ""; String b = null; System.out.println(a==b); // false System.out.println(a.equals(b)); // false

Ambas declaraciones devuelven false . Parece que no puedo encontrar cuál es la diferencia real entre ellos.


"" es una cadena real, aunque vacía.

null, sin embargo, significa que la variable String apunta a nada.

a==b devuelve falso porque "" y nulo no ocupan el mismo espacio en la memoria, en otras palabras, sus variables no apuntan a los mismos objetos.

a.equals(b) devuelve falso porque "" no es nulo, obviamente.

Sin embargo, la diferencia es que dado que "" es una cadena real, aún puede invocar métodos o funciones en ella como

a.length()

a.substring(0, 1)

y así.

Si el String es nulo, como b, Java arrojaría una NullPointerException si intentara invocar, por ejemplo:

b.length()

Si la diferencia que te estás preguntando es == versus igual, es esta:

== compara referencias, como si fuera

String a = new String(""); String b = new String(""); System.out.println(a==b);

Eso daría como resultado falso porque asigné dos objetos diferentes, y a y b apuntan a diferentes objetos.

Sin embargo, a.equals(b) en este caso devolvería true, porque equals for Strings devolverá true si y solo si el argumento String no es nulo y representa la misma secuencia de caracteres.

Tenga en cuenta, sin embargo, que Java tiene un caso especial para Strings.

String a = "abc"; String b = "abc"; System.out.println(a==b);

Podrías pensar que la salida sería false , ya que debería asignar dos cadenas diferentes. En realidad, Java intern cadenas literales (las que se inicializan como a y b en nuestro ejemplo). Así que ten cuidado, porque eso puede dar algunos falsos positivos sobre cómo funciona ==.


En Java, un tipo de referencia asignado null no tiene ningún valor . Una cadena asignada "" tiene un valor: una cadena vacía, es decir, una cadena sin caracteres. Cuando a una variable se le asigna null , significa que no hay ningún objeto subyacente de ningún tipo, cadena u otro.


Este concepto se puede entender mejor a partir de las matemáticas. ¿Alguna vez ha tratado de dividir un número (no cero) entre 0 usando una calculadora, por ejemplo, 7/0? Obtendrá un resultado que se parece a algo así: undefined , not a number , null , etc. Esto significa que la operación es imposible, por alguna razón (dejemos que esas razones se debatan otro día).

Ahora, realice esto: 0/7. Obtendrá la salida 0. Esto significa que la operación es posible y puede ejecutarse, pero la respuesta es solo 0 porque no queda nada después de la división. Hay un resultado válido y ese resultado es cero.

En el primer ejemplo, no solo la salida no era válida, la operación no era posible de ejecutar. Esto es similar a la cadena null en java. El segundo ejemplo es similar a una cadena empty .


Hay una diferencia bastante significativa entre los dos. La cadena vacía "" es "la cadena que no tiene caracteres". Es una cadena real que tiene una longitud bien definida. Todas las operaciones de cadena estándar están bien definidas en la cadena vacía: puede convertirla en minúsculas, buscar el índice de algún carácter en ella, etc. La cadena null es "sin cadena". No tiene una longitud porque no es una cadena en absoluto. Intentar aplicar cualquier operación de cadena estándar a la cadena nula provocará una NullPointerException en tiempo de ejecución.


Lo que sus declaraciones le dicen es que "" no es lo mismo que nulo, lo cual es cierto. "" es una cadena vacía; null significa que no se ha asignado ningún valor.

Puede ser más esclarecedor intentar:

System.out.println(a.length()); // 0 System.out.println(b.length()); // error; b is not an object

"" sigue siendo una cadena, lo que significa que puede llamar a sus métodos y obtener información significativa. null es una variable vacía; literalmente, no hay nada allí.



También puede comprender la diferencia entre cadenas nulas y vacías de esta manera:


Una cadena puede estar vacía o tener un valor null . Si una cadena es null , no se refiere a nada en la memoria. Pruebe s.length()>0 . Esto se debe a que si una cadena está vacía, aún devuelve una longitud de 0. Por lo tanto, si no ingresa nada para la misma, continuará repitiéndose ya que no registra la cadena como null . Mientras que si comprueba la longitud, saldrá de su ciclo.


aquí a is an Object pero b(null) no es un Objeto es una referencia nula

System.out.println(a instanceof Object); // true System.out.println(b instanceof Object); // false

aquí está mi respuesta similar


"" y null ambos son diferentes. el primero significa como parte de la declaración de variable de cadena la constante de cadena se ha creado en el grupo de cadenas y parte de la memoria se ha asignado para la misma.

Pero cuando lo declaramos con nulo , se acaba de instanciar jvm, pero no se ha asignado memoria para ello. por lo tanto, si intenta acceder a este objeto marcándolo con una variable "en blanco", no puede evitar nullpointerexception. A continuación, encontrará un caso de uso.

public class StringCheck { public static void main(String[] args) { // TODO Auto-generated method stub String s1 = "siddhartha"; String s2 = ""; String s3 = null; System.out.println("length s1 ="+s1.length()); System.out.println("length s2 ="+s2.length()); //this piece of code will still throw nullpointerexception . if(s3 != ""){ System.out.println("length s3 ="+s3.length()); } }

}


null significa que el nombre no hace referencia a ningún objeto instanciado. "" significa una cadena vacía.

Aquí a hace referencia a algún objeto que resulta ser una cadena vacía. b no hace referencia a ningún objeto ya que es nulo.


String s = ""; s.length(); String s = null; s.length();

Una referencia a una cadena vacía "" apunta a un objeto en el montón, por lo que puede invocar métodos sobre él.

Pero una referencia que apunte a null no tiene ningún objeto que apuntar en el montón y, por lo tanto, obtendrá una NullPointerException .