【问题标题】:Strings don't seem to be equal in Java on Android, even though they print the sameAndroid 上的 Java 中的字符串似乎不相等,即使它们打印相同
【发布时间】:2011-02-11 21:28:03
【问题描述】:

我遇到了一个让我很困惑的问题。我的 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 个字符长,如您所料。

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

【问题讨论】:

    标签: java android string equals equality


    【解决方案1】:

    使用 String 的 equals 方法来比较字符串。 == 运算符只会比较对象引用。

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

    【讨论】:

    • CurrentNode.getNodeName().toString().equals("start") == "start".equals(CurrentNode.getNodeName().toString() 的结果是什么?
    • @MohammedShareefC 我希望true,但您可以测试它以找出答案。
    • 是的。抱歉太懒了。
    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢您的解释。我浪费了宝贵的时间想知道为什么 == 不起作用
    【解决方案3】:

    你需要使用 .equals

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多