Eu realmente não sei'não sei porque é que a declaração abaixo não está a ser executada:
if (s == "/quit")
{
System.out.println("quitted");
}
Abaixo está a classe inteira.
É provavelmente um problema lógico realmente estúpido, mas tenho estado a puxar o meu cabelo para aqui, não conseguindo perceber isto.
Obrigado por procurar :)
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");
}
}
}
}
}
No seu exemplo está a comparar os objectos de corda, não o seu conteúdo.
A sua comparação deve ser:
if (s.equals("/quit"))
Ou se `s' string nullity does't mind / or you really don't like NPEs:
if ("/quit".equals(s))
Para comparar Cordas para a igualdade, don't use ==**. O operador **==*** verifica se dois objectos são exactamente o mesmo objecto:
Em **Java*** há muitas comparações de cordas.
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>