14

我有一个问题,我很困惑。我的 android 应用程序中有以下代码行:

System.out.println(CurrentNode.getNodeName().toString());
if (CurrentNode.getNodeName().toString() == "start") {
    System.out.println("Yes it does!");
} else {
    System.out.println("No it doesnt");
}

当我查看第一个 println 语句的输出时,它在 LogCat 中显示为“start”(显然没有引号)。但是当 if 语句执行时,它会转到 else 语句并打印“No it doesn't”。

我想知道节点的名称中是否可能包含某种非打印字符,所以我检查了来自 getNodeName() 的字符串的长度,它是 5 个字符长,如您所料。

有没有人知道这里发生了什么?

4

3 回答 3

44

使用 String 的equals方法比较字符串。==操作员只会比较对象引用。

if ( CurrentNode.getNodeName().toString().equals("start") ) {
   ...
于 2010-04-24T15:24:32.463 回答
13

使用CurrentNode.getNodeName().toString().equals("start").

在 Java 中,新手遇到的最常见错误之一是使用==比较字符串。您必须记住,==比较对象身份(思考内存地址),而不是内容

于 2010-04-24T15:25:23.087 回答
7

您需要使用 .equals

if ("start".equals(CurrentNode.getNodeName().toString()) { ... }
于 2010-04-24T15:24:43.260 回答