问题
最近学习java, 在判断两个字符串是否相等的时候惯性使用了 ‘==’ 但是程序却不能正确运行
public class learn_java {
public static void main(String args[]){
String str1 = new String("MadonG");
String str2 = new String("MadonG");
String str3 = new String("test");
System.out.println(str1 == str2);
System.out.println(str1 == str3);
}
}
运行结果👇
false
false
显然和我们期待的结果不太相同
解决方案
在java中String是对象类型, 如果使用 ‘==’ 两个字符串是不是相等比较的不是String的内容, 而是两个String对象的内存地址.
所以在java中要比较两个String是不是相等的要使用String.equals()
, 例如👇
public class learn_java {
public static void main(String args[]){
String str1 = new String("MadonG");
String str2 = new String("MadonG");
String str3 = new String("test");
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));
}
}
运行结果👇
true
false
NOTE
在调试过程中发现一个问题, 如果两个String 都是使用字符串直接创建, 那么使用 ‘==’ 就可以输出两个 String 相等👇
public class learn_java {
public static void main(String args[]){
String str1 = "MadonG";
String str2 = "MadonG";
System.out.println(str1 == str2);
}
}
输出结果👇
true
为什么这样就可以正常工作了呢?这是因为两个String引用实际上指向了一个字符串对象,如图👇
所以比较str1和str2自然就是相等的了