42 java multithreading if-statement string-comparison
我真的不知道为什么下面的if语句没有执行:
if (s == "/quit")
{
System.out.println("quitted");
}
Run Code Online (Sandbox Code Playgroud)
以下是全班.
这可能是一个非常愚蠢的逻辑问题,但我一直在把头发拉到这里,但是无法解决这个问题.
谢谢你看:)
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");
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Wis*_*chi 91
在您的示例中,您要比较字符串对象,而不是它们的内容.
你的比较应该是:
if (s.equals("/quit"))
Run Code Online (Sandbox Code Playgroud)
或者如果s字符串无效不介意/或者你真的不喜欢NPE:
if ("/quit".equals(s))
Run Code Online (Sandbox Code Playgroud)
TSt*_*per 32
要比较字符串的相等性,请不要使用==.在==操作符检查是否两个对象是完全一样的对象:
在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>
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 11
Stringjava中的s是对象,因此在与之比较时==,您要比较引用而不是值.正确的方法是使用equals().
但是,有一种方法.如果要String使用==运算符比较对象,可以使用JVM处理字符串的方式.例如:
String a = "aaa";
String b = "aaa";
boolean b = a == b;
Run Code Online (Sandbox Code Playgroud)
b会的true.为什么?
因为JVM有一个常量表String.因此,无论何时使用字符串文字(引号"),虚拟机都会返回相同的对象,因此会==返回true.
通过使用该intern()方法,即使使用非文字字符串,也可以使用相同的"表" .它返回与该表中当前字符串值对应的对象(或者将其放在那里,如果不是).所以:
String a = new String("aa");
String b = new String("aa");
boolean check1 = a == b; // false
boolean check1 = a.intern() == b.intern(); // true
Run Code Online (Sandbox Code Playgroud)
因此,对于任何两个字符串s和t,当且仅当s.equals(t)为真时,s.intern()== t.intern()才为真.
您可以使用
if("/quit".equals(s))
...
Run Code Online (Sandbox Code Playgroud)
或者
if("/quit".compareTo(s) == 0)
...
Run Code Online (Sandbox Code Playgroud)
后者进行字典比较,如果两个字符串相同则返回0。
如果您使用 C++ 和 Java 编写代码,最好记住在 C++ 中,字符串类重载了 == 运算符。但在 Java 中并非如此。你需要使用equals()或equalsIgnoreCase()为此。
| 归档时间: |
|
| 查看次数: |
367391 次 |
| 最近记录: |