Java: while { if { System.exit(0) }} funktioniert nicht?

... komplette Frage anzeigen

3 Antworten

Stringvergleiche mit ".equals(...)". Ein String ist ein Referenztyp. Wenn Du mit "==" vergleichst, vergleichst Du die Adressen, nicht den Inhalt.

Nachdem Java keine Operatorüberladung kennt, kann die Klasse String das auch gar nicht anders machen. "==" vergleicht immer die Adressen der Referenzvariable auf Gleichheit.

Also:

if ((randomString == null) || (randomString.equals("x")))
System.exit(0);

Dann sollte es funktionieren.

Und beachten, dass dieser Code einen Shortcut-Operator benutzt und daher einen (in diesem Fall erwünschten!) Nebeneffekt enthält.

Der rechte Teil der Bedingung wird nur ausgeführt, wenn der links "false" ergibt. Das ist oftmals "schlechter Stil", weswegen ich die Shortcut-Operatoren eigentlich vermeide. Aber in diesem Fall ist es sogar wünschenswert, denn wenn randomString eine Nullreferenz ist, können wir die ".equals(...)"-Methode nicht auf diese Refrenz aufrufen.

Dies ist einer der wenigen Fälle, in denen man diesen Operator tatsächlich haben möchte. ;-)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Ogolaz
14.06.2016, 23:12

Danke für die schnelle Antwort :) aber warum funktioniert dann system.exit(0) auch nicht, obwohl ich eine leere (also keine) Eingabe mache?

1
Kommentar von Axiallager
14.06.2016, 23:13

Weil eine leere Eingabe einen Leerstring, also "" ergibt und nicht null.

2

String-Objekte sollten nicht mit "==" vergleicht werden - hierbei werden die Speicheradressen bzw. Referenzen auf Äquivalenz geprüft.

Stattdessen sollte die Methode equals(String) bevorzugt werden. ^^

Ich hoffe, ich konnte dir helfen; wenn du noch Fragen hast, kommentiere einfach.

LG Willibergi

Antwort bewerten Vielen Dank für Deine Bewertung

In Java werden zwei Strings nicht mit == verglichen, da dieser Operator nur dann true ergibt, wenn es sich um das gleiche Objekt handelt. Nutze die equals-Methode stattdessen.

String s = "Hallo";

if (s.equals("Hallo"))
{
System.exit(0);
}

Antwort bewerten Vielen Dank für Deine Bewertung