If statement with String comparison fails
我真的不知道下面的if语句为什么没有执行:
1 2 3 4 |
下面是整个班级。
这可能是一个非常愚蠢的逻辑问题,但我一直在这里把我的头发拔出来,无法解决这个问题。
感谢您的关注:)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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")) |
或者如果
1 | if ("/quit".equals(s)) |
号
若要比较字符串是否相等,请不要使用==。==运算符检查两个对象是否完全相同:
在Java中有许多字符串比较。
1 2 3 4 5 | 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> |
在Java中,EDCOX1的3个s是对象,所以当与EDCOX1(4)比较时,您正在比较引用,而不是值。正确的方法是使用
但是,有一种方法。如果要使用
。
因为jvm有一个由
通过使用
1 2 3 4 |
。
It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.
号
如果您在C++和Java中编码,最好记住在C++中,字符串类具有= =运算符重载。但在Java中却不是这样。您需要使用
你可以用
1 2 | if("/quit".equals(s)) ... |
。
或
1 2 | if("/quit".compareTo(s) == 0) ... |
后者进行词典比较,如果两个字符串相同,则返回0。
不应使用==进行字符串比较。该运算符将只检查它是否是同一个实例,而不是同一个值。使用.equals方法检查相同的值。