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

2022-09-03 16:24:49

我有一个问题,我对此感到困惑。我的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 语句并打印“不,它没有”。

我想知道节点的名称中是否可能包含某种非打印字符,因此我检查了来自getNodeName()的字符串的长度,并且它的长度为5个字符,正如您所期望的那样。

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


答案 1

使用字符串的等于方法比较字符串。该运算符将仅比较对象引用。==

if ( CurrentNode.getNodeName().toString().equals("start") ) {
   ...

答案 2

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

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