如果具有字符串比较的语句失败

我真的不知道为什么下面的if语句没有执行:

if (s == "/quit")
{
    System.out.println("quitted");
}

下面是整个班级。

这可能是一个非常愚蠢的逻辑问题,但我一直在这里拉扯我的头发,无法弄清楚这一点。

感谢您的:)

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");
                }
            }
        }
    }
}

答案 1

在您的示例中,您比较的是字符串对象,而不是它们的内容。

您的比较应该是:

if (s.equals("/quit"))

或者,如果字符串空性不介意/或者你真的不喜欢NPE:s

if ("/quit".equals(s))

答案 2

若要比较字符串的相等性,请不要使用 ==== 运算符检查两个对象是否完全相同:

Java中有许多字符串比较。

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>