Frage zu arrays

moccajoghurt

Bekanntes Mitglied
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.

Die fragliche Stelle sieht ungefähr so aus:

Java:
if (staedte[0][0] == stadt1) {System.out.println("wahr");}

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:
public class Navigator {
	public static void main(String[] args) {
		int as = IO.readInt("Anzahl Städte: ");
		String[][] staedte = new String[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 definiert
			String 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?1
				if (stadt1 == staedte[x][0]) {
					int j = 1;
					while (true) {
						if (staedte[x][j] == null) {
							staedte[x][j] = stadt2;
							break;
						}
						j++;
					}
				}
			}
		}
	}
}
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
Und um sicher zu gehen könntest du folgendes nutzen:

Java:
if (stadt1.equalsIgnoreCase(staedte[x][0])){

Dann klappt es auch mit unterschiedlichen Schreibweisen bezüglich Groß-/Kleinschreibung.
 
Somit ist egal was du mit dem "=="-Operator vergleichst, es liefert immer false zurück!
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.
 

Zurück
Oben