我有两个字符串,一个是用户输入的,另一个是线程的名称。我输入的名称应该与线程相同。为了验证这一点,我有程序输出
System.out.println("DS:" + DeamonMain.threadNameFinal + "CN:" +getName());
打印
DS:Thread-66CN:Thread-66
现在这些字符串似乎是相同的。但是,当我使用
测试它的有效性时boolean factChecker = DeamonMain.threadNameFinal == getName();
System.out.println(factChecker);
它打印错误...
这是为什么?这与getName()有关吗?字符串有何不同,为什么会这样?
答案 0 :(得分:2)
您需要使用String.equals
来比较String
平等,而不是==
符号。
如:
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
==
运算符检查引用相等性,而equals
方法检查String
值的相等性。
另请参阅here了解有关此问题的旧帖子。
答案 1 :(得分:1)
再次,再次......
Java中的字符串与equals()
进行比较,而不与==
进行比较。
将您的比较更改为:
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
答案 2 :(得分:0)
您应该使用.equals()
方法来比较字符串,而不是==
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
原因是.equals()
测试值相等(字符串具有相同的字符),而==
测试引用相等。
答案 3 :(得分:0)
您需要使用equals()
方法而不是==
像这样:
DeamonMain.threadNameFinal.equals(getName())
答案 4 :(得分:0)
使用equals()
进行字符串比较而不是==
运算符
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
System.out.println(factChecker);
equals()
方法用于内容比较,其中==
是参考比较。