Ich weiß wirklich nicht, warum die folgende if-Anweisung nicht ausgeführt wird:
if (s == "/quit")
{
System.out.println("quitted");
}
Unten ist die ganze Klasse.
Es ist wahrscheinlich ein wirklich dummes Logikproblem, aber ich habe mir hier die Haare gerauft, weil ich es nicht herausfinden konnte.
Vielen Dank für die Suche :)
class TextParser extends Thread {
public void run() {
while (true) {
for(int i = 0; i < connectionList.size(); i++) {
try {
System.out.println("reading " + i);
Connection c = connectionList.elementAt(i);
Thread.sleep(200);
System.out.println("reading " + i);
String s = "";
if (c.in.ready() == true) {
s = c.in.readLine();
//System.out.println(i + "> "+ s);
if (s == "/quit") {
System.out.println("quitted");
}
if(! s.equals("")) {
for(int j = 0; j < connectionList.size(); j++) {
Connection c2 = connectionList.elementAt(j);
c2.out.println(s);
}
}
}
} catch(Exception e){
System.out.println("reading error");
}
}
}
}
}
In Ihrem Beispiel vergleichen Sie die String-Objekte, nicht deren Inhalt.
Ihr Vergleich sollte lauten:
if (s.equals("/quit"))
Oder wenn s
string nullity nichts ausmacht / oder Sie NPEs wirklich nicht mögen:
if ("/quit".equals(s))
Um Strings auf Gleichheit zu vergleichen, verwenden Sie nicht ==. Der Operator == prüft, ob zwei Objekte genau dasselbe Objekt sind:
In Java gibt es viele String-Vergleiche.
String s = "something", t = "maybe something else";
if (s == t) // Legal, but usually WRONG.
if (s.equals(t)) // RIGHT
if (s > t) // ILLEGAL
if (s.compareTo(t) > 0) // also CORRECT>
Sie sollten keine String-Vergleiche mit == durchführen. Dieser Operator prüft nur, ob es sich um dieselbe Instanz handelt, nicht um denselben Wert. Verwenden Sie die Methode .equals, um zu prüfen, ob es sich um denselben Wert handelt.