Java 两个字符串';(我认为)相同的s在检查是否相同时不会返回true
我有两个字符串,一个由用户输入,一个是线程的名称。我输入的名称应该与线程相同。为了验证这一点,我有程序输出Java 两个字符串';(我认为)相同的s在检查是否相同时不会返回true,java,string,boolean,equals,Java,String,Boolean,Equals,我有两个字符串,一个由用户输入,一个是线程的名称。我输入的名称应该与线程相同。为了验证这一点,我有程序输出 System.out.println("DS:" + DeamonMain.threadNameFinal + "CN:" +getName()); 哪张照片 DS:Thread-66CN:Thread-66 现在,它们似乎是相同的字符串。然而,当我有它测试的有效性,这使用 boolean factChecker = DeamonMain.threadNameFinal == getN
System.out.println("DS:" + DeamonMain.threadNameFinal + "CN:" +getName());
哪张照片
DS:Thread-66CN:Thread-66
现在,它们似乎是相同的字符串。然而,当我有它测试的有效性,这使用
boolean factChecker = DeamonMain.threadNameFinal == getName();
System.out.println(factChecker);
它打印的是假的
为什么会这样?这与getName()有关吗?字符串有什么不同?为什么不同?您需要使用
string.equals
来比较string
相等,而不是=
符号
例如:
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
=
运算符检查引用相等,而equals
方法检查字符串的值相等
另请参阅,以了解有关此问题的旧线程 一次又一次
Java中的字符串与equals()
比较,而不是与=
比较
将您的比较更改为:
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
您应该使用.equals()
方法来比较字符串,而不是=
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
原因是.equals()
测试值相等(字符串具有相同的字符),而=
测试引用相等。您需要使用equals()
方法而不是=
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
像这样:
DeamonMain.threadNameFinal.equals(getName())
使用equals()
进行字符串比较,而不是使用=
运算符
boolean factChecker = DeamonMain.threadNameFinal.equals(getName());
System.out.println(factChecker);
equals()
方法用于内容比较,其中as==
是参考比较。这里问得最多的问题是什么?