2010-04-24 55 views
14

我有一个我很困惑的问题。我在我的Android应用程序的代码下面几行:在Android上,Java中的字符串似乎并不相同,尽管它们打印的是相同的

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中显示为“开始”(不带引号明显)。但是,当执行if语句时,它会转到else语句并打印出“不,不”。

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

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

回答

44

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

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

CurrentNode.getNodeName()。toString()。equals(“start”)==“start”.equals(CurrentNode.getNodeName()。toString())的结果是什么? – 2017-09-22 08:00:22

+0

@MohammedShareefC I' D期待'真实',但你可以测试它找出。 – 2017-09-22 12:31:54

+0

yup。对不起,懒惰。 – 2017-09-22 12:40:03

7

您需要使用.equals

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

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

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

+0

非常感谢这个解释..我浪费了宝贵的时间想知道为什么heck ==不起作用 – imin 2011-11-22 03:08:08

相关问题