Java比较字符串
示例
为了比较字符串是否相等,应使用String对象equals或equalsIgnoreCase方法。
例如,以下代码段将确定的两个实例String在所有字符上是否相等:
String firstString = "Test123"; String secondString = "Test" + 123; if (firstString.equals(secondString)) { //这两个字符串具有相同的内容。 }
现场演示
本示例将比较它们,而与它们的情况无关:
String firstString = "Test123"; String secondString = "TEST123"; if (firstString.equalsIgnoreCase(secondString)) { //两个字符串都是相等的,忽略了各个字符的大小写。 }
现场演示
请注意,equalsIgnoreCase不允许您指定Locale。例如,如果您比较两个单词,"Taki"而"TAKI"在英语中它们是相等的;但是,在土耳其语中,它们是不同的(在土耳其语中,小写字母I是ı)。对于这种情况,解决方案是将两个字符串都使用转换为小写(或大写),Locale然后与进行比较equals。
String firstString = "Taki"; String secondString = "TAKI"; System.out.println(firstString.equalsIgnoreCase(secondString)); //打印真实 Locale locale = Locale.forLanguageTag("tr-TR"); System.out.println(firstString.toLowerCase(locale).equals( secondString.toLowerCase(locale))); //打印错误
现场演示
不要使用==运算符比较字符串
除非您可以保证所有字符串都已被内联(请参见下文),否则您不应使用==或!=运算符来比较字符串。这些运算符实际上测试引用,并且由于多个String对象可以表示同一个String,因此很容易给出错误的答案。
而是使用方法,该方法将根据字符串对象的值进行比较。有关详细说明,请参阅陷阱:使用==比较字符串。String.equals(Object)
在switch语句中比较字符串
从Java1.7开始,可以将String变量与switch语句中的文字进行比较。确保String不为null,否则它将始终抛出NullPointerException。使用进行比较String.equals,即区分大小写。
String stringToSwitch = "A"; switch (stringToSwitch) { case "a": System.out.println("a"); break; case "A": System.out.println("A"); //代码在这里 break; case "B": System.out.println("B"); break; default: break; }
现场演示
比较具有常数值的字串
将aString与常量值进行比较时,可以将常量值放在的左侧,equals以确保NullPointerException如果另一个String为,则不会得到anull。
"baz".equals(foo)
虽然foo.equals("baz")将抛出NullPointerException,如果foo是null, 将评估到。"baz".equals(foo)false
更具可读性的替代方法是使用,它对两个参数进行空检查。Objects.equals()Objects.equals(foo,"baz")