在Android上的Java中字符串似乎并不相同,即使它们打印相同

rob*_*ntw 14 java string android equality equals

我有一个问题,我很困惑.我在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");
}
Run Code Online (Sandbox Code Playgroud)

当我查看第一个println语句的输出时,它在LogCat中显示为"start"(显然没有引号).但是当if语句执行时,它会转到else语句并输出"No it does not".

我想知道节点的名称是否可能有某种非打印字符,所以我检查了来自getNodeName()的字符串的长度,它是5个字符长,正如您所期望的那样.

有谁知道这里发生了什么?

Bil*_*ard 44

使用String的equals方法来比较字符串.该==运营商将只比较对象的引用.

if ( CurrentNode.getNodeName().toString().equals("start") ) {
   ...
Run Code Online (Sandbox Code Playgroud)


Xav*_* Ho 13

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

在Java中,新手遇到的最常见错误之一是使用==比较字符串.你必须记住,==比较对象标识(Think memory addresses),而不是内容.


NG.*_*NG. 7

你需要使用.equals

if ("start".equals(CurrentNode.getNodeName().toString()) { ... }
Run Code Online (Sandbox Code Playgroud)