Okay, so funktionieren Datentypen in Java. (Sie müssen mein Englisch entschuldigen, ich verwende wahrscheinlich nicht das richtige Vokabular. Sie müssen zwischen zwei davon unterscheiden. Die Basisdatentypen und die normalen Datentypen. Basisdatentypen machen so ziemlich alles aus, was existiert. Zum Beispiel dort sind alle Zahlen, Zeichen, Boolesche Werte usw. Die normalen Datentypen oder komplexen Datentypen sind alles andere. Ein String ist ein Array von Zeichen, daher ein komplexer Datentyp.
Jede Variable, die Sie erstellen, ist tatsächlich ein Zeiger auf den Wert in Ihrem Speicher. Beispielsweise:
String s = new String("This is just a test");
Die Variable "s" enthält KEINEN String. Es ist ein Zeiger. Dieser Zeiger zeigt auf die Variable in Ihrem Speicher. Wenn Sie aufrufen System.out.println(anyObject)
, wird die toString()
Methode dieses Objekts aufgerufen. Wenn es nicht toString
von Object überschrieben wurde , wird der Zeiger gedruckt. Beispielsweise:
public class Foo{
public static void main(String[] args) {
Foo f = new Foo();
System.out.println(f);
}
}
>>>>
>>>>
>>>>Foo@330bedb4
Alles hinter dem "@" ist der Zeiger. Dies funktioniert nur für komplexe Datentypen. Primitive Datentypen werden DIREKT in ihrem Zeiger gespeichert. Es gibt also eigentlich keinen Zeiger und die Werte werden direkt gespeichert.
Beispielsweise:
int i = 123;
Ich speichere in diesem Fall keinen Zeiger. Ich werde den ganzzahligen Wert 123 (in Byte ofc) speichern.
Okay, kommen wir zurück zum ==
Operator. Es vergleicht immer den Zeiger und nicht den Inhalt, der an der Position des Zeigers im Speicher gespeichert ist.
Beispiel:
String s1 = new String("Hallo");
String s2 = new String("Hallo");
System.out.println(s1 == s2);
>>>>> false
Diese beiden Zeichenfolgen haben einen unterschiedlichen Zeiger. String.equals (String other) vergleicht jedoch den Inhalt. Sie können primitive Datentypen mit dem Operator '==' vergleichen, da der Zeiger zweier verschiedener Objekte mit demselben Inhalt gleich ist.
Null würde bedeuten, dass der Zeiger leer ist. Ein leerer primitiver Datentyp ist standardmäßig 0 (für Zahlen). Null für ein komplexes Objekt bedeutet jedoch, dass dieses Objekt nicht existiert.
Schöne Grüße
null
hat keine Methoden, also auch nichtequals()
. WennmyString
janull
, wie würden Sie jemals eine Methode dafür aufrufen? :)