-1

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

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

哪个打印

DS:Thread-66CN:Thread-66

现在这些似乎是相同的字符串。但是,当我使用它测试它的有效性时

boolean factChecker = DeamonMain.threadNameFinal == getName();
System.out.println(factChecker);

它打印错误...

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

4

5 回答 5

2

您需要用于String.equals比较String相等性,而不是==符号。

如:

boolean factChecker = DeamonMain.threadNameFinal.equals(getName());

==运算符检查引用是否相等,而方法equals检查String值是否相等。

另请参阅此处以获取有关此问题的较旧线程。

于 2013-07-31T16:09:29.787 回答
1

一次又一次...

Java 中的字符串是与 比较equals(),而不是与==.

将您的比较更改为:

boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
于 2013-07-31T16:10:03.763 回答
0

您应该使用该.equals()方法来比较字符串,而不是==

boolean factChecker = DeamonMain.threadNameFinal.equals(getName());

原因是.equals()值相等的测试(字符串具有相同的字符),而==引用相等的测试。

于 2013-07-31T16:10:07.610 回答
0

您需要使用equals()方法而不是==

像这样:

DeamonMain.threadNameFinal.equals(getName())
于 2013-07-31T16:10:08.303 回答
0

用于equals()字符串比较而不是==运算符

  boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
  System.out.println(factChecker);

equals()方法用于内容比较,==而参考比较也是如此。

于 2013-07-31T16:10:08.700 回答