可能重复:
Java string comparison?
我遇到了以下问题,我有一个名为“ lang ”的对象,是一个输出字符串的方法LanguageDetector.detect()的结果。
lang = LanguageDetector.detect();
所以我想检查语言是否是英语,所以我正在检查,
lang == "en"
以下屏幕是我的调试屏幕,我的lang显示“en”,但我的lang ==“en”显示为false而lang.toString()==“en”为false,是否有人遇到以下问题之前并有一个可能的解决方案?
答案 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"