字符串比较中奇怪的Java行为

drh*_*lau 3 java string

可能重复:
Java字符串比较?

我遇到了以下问题,我有一个名为" lang " 的对象,是一个输出字符串的方法LanguageDetector.detect()的结果.

lang = LanguageDetector.detect();
Run Code Online (Sandbox Code Playgroud)

所以我想检查语言是否是英语,所以我正在检查,

lang == "en"
Run Code Online (Sandbox Code Playgroud)

以下屏幕是我的调试屏幕,我的lang显示"en",但是我的lang =="en"显示为false而lang.toString()=="en"为false,是否有人遇到以下问题并且有一个可能的方案?

奇怪的java问题

小智 7

使用String对象的equals()方法而不是直接比较.

String first = new String("Hello");
String second = new String("Hello");

first == second will return false.

first.equals(second) will return true.
Run Code Online (Sandbox Code Playgroud)

  • 实际上,在你的例子中,(first == second)也将返回true.这是因为所有文字字符串都是实习的.为了使你的例子工作,你需要像String second = new String("Hello")这样的东西. (5认同)

Luc*_*ero 5

在Java中,==始终进行参考比较.您需要进行值比较(equals()例如,使用方法).


Bri*_*new 5

您正在比较字符串的引用而不是字符串本身的内容.有关详细信息,请参见此处

请注意,此问题不仅适用于字符串,而是适用于所有对象.因此,您可能必须为equals()自己创建的任何对象定义适当的方法.

另外,如果你不小心的话,字符串实习会使问题混淆.有关详细信息,请参见此处