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!