Ich arbeite an einem Programm, bei dem der Wert eines arrays mit einem eingelesenen Wert verglichen wird. Es handelt sich bei beiden Werten um Strings.
Komischerweise ist die Bedingung niemals wahr, obwohl staedte[0][0] und stadt1 denselben Wert haben (System.out.println(staedte[0][0]) und System.out.println(staedt1) liefern diesselbe Ausgabe...). Wie kommt das und wie kann ich das ändern?
edit: Hier doch das komplette Programm, das Meiste ist für die Frage irrelevant und eigentlich sind nur die Stellen wichtig, bei denen ich eine Notiz gemacht habe.
Java:
publicclassNavigator{publicstaticvoidmain(String[] args){int as = IO.readInt("Anzahl Städte: ");String[][] staedte =newString[as][as];for(int i =0; i < staedte.length; i++){//Stadtname wird definiert
staedte[i][0]= IO.readString("Stadtname: ");}int direkt = IO.readInt("Anzahl Direktverbindungen: ");for(int i =0; i < direkt; i++){//Stadtname wird definiertString stadt1 = IO.readString("Stadt 1: ");String stadt2 = IO.readString("Stadt 2: ");for(int x =0; x < staedte.length; x++){//Stadtnamen werden verglichen -- liefert niemals true. Warum?1if(stadt1 == staedte[x][0]){int j =1;while(true){if(staedte[x][j]==null){
staedte[x][j]= stadt2;break;}
j++;}}}}}}
Strings werden NICHT mit "==" verglichen, sondern mit der equals-Methode.
Java:
if(stadt1.equals(staedte[x][0])){...
Dann klappt es auch mit den Nachbarn.
Edit:
der "=="-Operator, vergleicht die Referenz der beiden Strings. Obwohl in beiden sogar der gleiche String gespeichert sein könnte, liegen sie physikalisch an verschiedenen Stellen des Speichers. Somit ist egal was du mit dem "=="-Operator vergleichst, es liefert immer false zurück!
Für die primitiven Datentypen (int, float usw) kann man mit "==" vergleichen, bei Objekten benutzt man die "equals"-Methode
falsch, es kann auch passieren das die Klasse String, wenn sie merkt das 2 mal derselbe String angefordert wird, nur 1 einzige Instanz erzeugt und zweimal eine Referenz darauf rausgibt. Dann wäre == true. Darauf darf man sich aber nicht verlassen.