Werte in Arrays vergleichen

Hai, Java-isten,

ich hab schon wieder 'n blödes Problem: ich hab ein zweidimensionales String-Array, in dem lauter einzelne Buchstaben stehen. Zur Laufzeit wird einer dieser Buchstaben als „der Richtige“ ausgewählt (foo[x][y]) und nun soll aus einem zweiten zweidimensionalen String-Array die Zeile ausgewählt werden, die als erstes den „Richtigen“ enthält - voll einfach, denk ich mir, und schreibe:

durchlaufe-fee-über-i
if ( foo[x][y] == fee[i][1] )
 { gib-mir-fee[i] } 

doch ist es niemals true (obwohl ich mir die Werte in der Schleife ausgeben lasse und die gewünschten Übereinstimmungen auftauchen)

Warum erkennt die Kröte denn nicht, wenn in beiden Feldern „A“ steht?grummel

Gibt’s eine Funktion, um den Typ eines Feldinhaltes zu prüfen, falls Java irgendwo eine implizite Typanpassung vorgenommen hat?

Gruß
Sibylle

hallo

ok - mal die basics:

string ist eine objektklasse und kein primitiver datentyp

mit String text = „hallo“; definierst du eine objektvariable „text“, erzeugst eine neue Instanz der klasse String mit inhalt „hallo“ und weist die referenz auf diese instanz der variable text zu.

vergleiche von objektvariablen gehen immer auf die referenz und nicht auf den inhalt.

beispiel:

String a = "hallo";
String b = "hallo";

if (a == b) {
 System.out.println("gleich");
}

du hast also zwei variablen, die auf strings zeigen. aufgrund einer speziellen eigenheit von java wird in diesem fall nur eine einzige instanz von string erzeugt. beide variablen erhalten die selbe referenz auf das selbe objekt. der vergleich ist damit true. ist in diesem fall ok.

anderes beispiel:

String a = "hallo";
String b = new String("hallo");

if (a == b) {
 System.out.println("gleich");
}

in diesem fall erzeugt java zwei instanzen von string, die allerdings den selben inhalt haben. die referenzen in den variablen sind aber unterschiedlich. es wird also kein text ausgegeben.

richtig wäre gewesen:

String a = "hallo";
String b = new String("hallo");

if (a.equals(b)) {
 System.out.println("gleich");
}

will man prüfen, ob in zwei objektvariablen haargenau das selbe objekt drinnen ist, kann man „==“ verwenden. es werden dabei nur die objektrefernezen verglichen. will man wissen, ob zwei objekte den seben inhalt haben, MUSS man equals verwenden - nur da wird tatsächlich der „wert“ des objekts verglichen. ev. muss man die equals-methode von eigenen objekten auch überschreiben, damit das korrekt funktioniert.

alles klar?

lg
erwin

ps: apropos: du hast also nur einzelne buchstaben im array, speicherst aber strings. wozu? ist doch ordentliche platzverschwendung, macht das ganze langsam und führt genau zu dem beschriebenen „problem“ (es ist kein problem sondern eine eigenheit von java, die man kennen muss). nimm statt dessen chars!

Hai, Erwin,

string ist eine objektklasse und kein primitiver datentyp

Mann - richtig *Hand-vor-Stirn-klatsch*
Dabei hab ich das gestern mehrfach gelesen, war aber irgendwie total darauf fixiert, daß es mit dem Array zusammenhängen müsste…

ps: apropos: du hast also nur einzelne buchstaben im array,
speicherst aber strings. wozu? ist doch ordentliche

Daß es nur einzelne Buchstaben sind, ist eine vorübergehende Erscheinung, basierend auf dem bisherigen System - man überlegt, ob man das ändern sollte… Nehmt Zahlen! Nehmt Zahlen…

Dank Dir für den Schubs in die richtige Richtung
Gruß
Sibylle