Está bien así es como tipos de datos de trabajo en Java. (Tiene que excusar mi inglés, no estoy usando el vocabulario correcto. Tiene que diferenciar entre dos de ellos. Los tipos de datos base y los tipos de datos normales. Los tipos de datos básicos conforman prácticamente todo lo que existe. Por ejemplo , hay todos los números, char, boolean, etc. los tipos de datos normales o tipos de datos complejos es todo lo demás. una cadena es una serie de caracteres, por lo tanto, un tipo de datos.
Cada variable que se crea es en realidad un puntero sobre el valor en su memoria Por ejemplo:.
String s = new String("This is just a test");
la var iable "s" NO contiene una cadena. Es un puntero. Este puntero apunta a la variable en su memoria. Cuando llama al System.out.println(anyObject)
, se llama al método toString()
de ese objeto. Si no anuló toString
desde Objeto, imprimirá el puntero. Por ejemplo:
public class Foo{
public static void main(String[] args) {
Foo f = new Foo();
System.out.println(f);
}
}
>>>>
>>>>
>>>>[email protected]
Todo detrás de la "@" es el puntero. Esto solo funciona para tipos de datos complejos. Los tipos de datos primitivos se guardan DIRECTAMENTE en su puntero. De hecho, no hay puntero y los valores se almacenan directamente.
Por ejemplo:
int i = 123;
i no almacena un puntero en este caso. Voy a almacenar el valor entero 123 (en bytes de c).
Bien, volvamos al operador ==
. Siempre compara el puntero y no el contenido guardado en la posición del puntero en la memoria.
Ejemplo:
String s1 = new String("Hallo");
String s2 = new String("Hallo");
System.out.println(s1 == s2);
>>>>> false
Este tanto de cadena tiene un puntero diferente. String.equals (String other) sin embargo compara el contenido. Puede comparar tipos de datos primitivos con el operador '==' porque el puntero de dos objetos diferentes con el mismo contenido es igual.
Null significa que el puntero está vacío. Un tipo de datos primitivos vacíos por defecto es 0 (para números). Sin embargo, para cualquier objeto complejo significa que ese objeto no existe.
Saludos
'null' no tiene ningún método, por lo que tampoco' igual() '. Si 'myString' fuera' nulo', ¿cómo invocarías un método en él? :) – BalusC
¿Puedo sugerirle 'System.out.println (myString)' inmediatamente antes del bloque if para que pueda ver lo que hay allí? –
¿Cómo sabes que "es igual a' nulo' "? –