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

时间:2011-07-17 10:36:15

标签: java string

  

可能重复:
  Java string comparison?

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

lang = LanguageDetector.detect();

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

lang == "en"

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

Weird java problem

7 个答案:

答案 0 :(得分:7)

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

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

first == second will return false.

first.equals(second) will return true.

答案 1 :(得分:5)

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

答案 2 :(得分:5)

您将引用与字符串进行比较,而不是字符串本身的内容。有关详细信息,请参阅here

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

如果您不小心,另外String 实习会使问题混淆。有关详细信息,请参阅here

答案 3 :(得分:3)

使用lang.equals("en")代替lang == "en"。后者比较两个字符串引用是否相等,而前者比较两个字符串的内容。

有关Java中不同字符串比较方法的概述,请参阅http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml

答案 4 :(得分:3)

使用==检查两个字符串引用是否指向同一个对象。

对于即时创建且未实现的字符串,这将等于false。

要比较字符串是否相同,逐字母,请使用string1.equals(string2)甚至string1.equalsIgnoreCase(string2)

答案 5 :(得分:2)

使用"en".equals(lang)代替lang == "en"

答案 6 :(得分:1)

如上所述,最好使用等于 但如果出于性能原因需要,你可以试试 intern()函数。

lang.intern() == "en"