检测String字符串是否相等
使用equals方法检测两个字符串是否相等
JDK1.8
public class Demo1 {
public static void main(String[] args) {
// 检测字符串是否相等
String str1 = "五月天";
String str2 = "五月天";
System.out.println(str1.equals(str2));
System.out.println("五月天".equals(str1));
System.out.println(str1.equals("五月天"));
}
}
equals方法是比较String的字面量是否相等,所以输出结果都为true。
不能用 == 判断字符串是否相等
public class Demo1 {
public static void main(String[] args) {
// 检测字符串是否相等
String str1 = "五月天";
String str2 = "五月天";
System.out.println(str1 == str2);
System.out.println(str1.substring(0, 1));
System.out.println(str1.substring(0, 1) == "五");
String str3 = str1 + "";
System.out.println(str3);
System.out.println(str3 == str1);
}
}
运行结果
原因
使用==是比较两个字符串的存储地址是否相等;
虚拟机始终将没有进行任何操作的相同字符串共享,所以判断str1 == str2结果为true。但是它们不是同一对象,它们只是共享了同一地址的同一变量;
若对字符串进行了+或substring等操作后,得到的字符串是不共享的,虽然字符串字面量相等,但是它们的变量地址是不同的,所以判断str1.substring(0, 1) == "五"和str3 == str1都为false!
使用equalsIgnoreCase判断字符串是否相等(不区分大小写)
public class Demo1 {
public static void main(String[] args) {
// 检测字符串是否相等
String MayDay = "MayDay";
String mayday = "mayday";
System.out.println(MayDay.equalsIgnoreCase(mayday));
}
}
MayDay.equalsIgnoreCase(mayday),输出true。