Frage von Geilomad, 74

Java beim "if-else" Befehl strings vergleichen?

Hey Leute hab eine Frage an alle java programmierer da draußen , warum bei meinemif-befehl bei strings keine gleichheit entsteht .

Alles wichtig zum Befehl hab ich hier aufgeführt; der rest des programmes ist egal für die aktion :

String bZed = "Zed";

String Ban1 = JOptionPane.showInputDialog(null, "Schreibe den Ersten Ban Hier Hinein: " , "Erster Ban" , JOptionPane.INFORMATION_MESSAGE);

//Champs nach erstem Ban ausschließen if (Ban1 == bZed) { System.out.println("yep"); }else{ System.out.println("Nope"); }

der Zeilenumbruch liegt wegen dem Format der Website zusammen .. im editor ist er nicht !

Wenn ich nun bei dir Aufforderung JOPtionPane.showInputDialog "Zed" Eingebe kommt im nachhinein bei cmd Nope anstatt yep was ich ursprünglich wollte

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Willibergi, 31

Mit "==" werden bei Strings nur die Speicheradressen vergleicht, hast du also ein Programm wie das folgende, so solltest du es nice verwenden:

String s1 = "12345";
String s2 = "12345";

if(s1 == s2){    //false
...
}

Auch wenn der Inhalt der beiden String-Objekte identisch ist, sind die Speicheradressen nicht gleich.

Du solltest stattdessen die von Object vererbte (und überschriebene) Methode

String equals(String anotherString)

verwenden.

Somit wäre das eben gezeigte Programm funktionstüchtig:

String s1 = "12345";
String s2 = "12345";

if(s1.equals(s2)){    //true
...
}

Der Vergleichsoperator "==" sollte allgemein mir bei expliziten Vergleichen auf die Speicheradressen (Referenz), aber sonst bei keinen Referenztypen (String, Array, erc.) verwendet werden.

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

LG Wi

Kommentar von SirNik ,

da du nicht explizit mit new ein neues String objekt erstellst, wird aus dem String-Pool das 12345 genommen und da würde == true ergeben, also in deinem Beispiel. Aber man sollte es so nicht machen, da das ja nicht immer der Fall ist ;)

Kommentar von Willibergi ,

Stimmt - das hatte ich nicht beachtet.

Aber trotzdem sollte bei gewollten Inhaltsvergleichen die dazu zuständige Methode equals(String) verwendet werden. ^^

LG Willibergi

Antwort
von Fregrin, 36

In Java solltest du Strings nie mit == vergleichen sondern mit a.equals(b). Und achte darauf, ob einer der beiden null sein kann.

Kommentar von triopasi ,

Zumindest in Java, in anderen Programmiersprachen schaut's anderst aus ;)

Kommentar von oelbart ,

Die Frage bezieht sich auf Java und in der Antwort steht ebenfalls, dass das für Java gilt.

Aber ja, in brainfuck ist es eventuell anders ;)

Antwort
von SirNik, 34

Hallo :D

Da Strings Objekte sind, steht in den Variablen nur die Referenz, also eine Adresse, auf dieses Objekt. und mit == prüfst du die referenz.

D.h.:
Dein String bZed hat eine andere Referenzadresse, als dein String Ban1, somit ist hier eine ungleichheit.

Da du auf den Inhalt prüfen möchtest, musst du die Methode euqals() benutzen:
bZed.equals(Ban1);
Mit dieser Zeile wird auf den Inhalt geprüft 

Hoffe es hilft dir weiter :D

Antwort
von dannyotti, 28

String ist ein Object, also musst du auch die Vergleiche eines Objektes anwenden.

also if(Ban1.eguals(bZed))

Und denk drann, Variablen immer klein schreiben. Wenn du ne kleine Webseite schreiben willst, wäre PHP wahrschienlich die besser variante

Antwort
von Mornamath, 23

Strings kann man nicht per == vergleichen.  Zum Vergleichen von Strings brauchst du die equals() Methode.  du musst also if(variableString.equals("blablabla")){dann ....} schreiben

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten