我遇到了一个我很困惑的问题。我的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 does not”。
我想知道节点的名称是否可能包含某种非打印字符,所以我检查了来自getNodeName()的字符串的长度,它是5个字符长,正如您所期望的那样。
有谁知道这里发生了什么?
答案 0 :(得分:44)
使用String的equals方法比较字符串。 ==
运算符只会比较对象引用。
if ( CurrentNode.getNodeName().toString().equals("start") ) {
...
答案 1 :(得分:13)
使用CurrentNode.getNodeName().toString().equals("start")
。
在Java中,新手遇到的最常见错误之一是使用==
来比较字符串。您必须记住,==
比较对象身份(思考内存地址),而不是内容。
答案 2 :(得分:7)
您需要使用.equals
if ("start".equals(CurrentNode.getNodeName().toString()) { ... }