两个字符串(我认为)是相同的,在检查是否相同时不返回true

时间:2013-07-31 16:08:41

标签: java string boolean equals

我有两个字符串,一个是用户输入的,另一个是线程的名称。我输入的名称应该与线程相同。为了验证这一点,我有程序输出

System.out.println("DS:" + DeamonMain.threadNameFinal + "CN:" +getName());

打印

DS:Thread-66CN:Thread-66

现在这些字符串似乎是相同的。但是,当我使用

测试它的有效性时
boolean factChecker = DeamonMain.threadNameFinal == getName();
System.out.println(factChecker);

它打印错误...

这是为什么?这与getName()有关吗?字符串有何不同,为什么会这样?

5 个答案:

答案 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()方法用于内容比较,其中==是参考比较。