字符串比较equals()和==的区别

0 阅读1分钟

equals()是Object类中的方法,比较的是地址值,和“==”一样

查看Object源码可知,默认的equals()方法和“==”一样,比较的都是对象的地址值 在这里插入图片描述

String类重写了equals()方法

String类重写了equals()方法,故字符串的equals()方法比较的是俩字符串的内容 在这里插入图片描述

字符串常量池

【注意点1】因为存在字符串常量池,使用直接赋值的方式创建相同内容的字符串,指向的地址也是相同

String str1 = "abc";
String str2 = "abc";

// 因为存在字符串常量池,使用直接赋值的方式创建相同内容的字符串,指向的地址也是相同
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));

在这里插入图片描述

【注意点2】但如果使用new String()的方式创建,即便内容相同,地址值也不相同

String str1 = new String("abc");
String str2 = new String("abc");

// 使用new的方式创建的字符串,即便内容相同,地址值也不是相同的
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));

在这里插入图片描述

【注意点3】 因为JVM在编译时会优化,所以 String str1 = "a" + "b" + "c"和String str1 = "abc"是相同的

// JVM编译时会优化,等同于 String str1 = "abc";
String str1 = "a" + "b" + "c";
String str2 = "abc";

System.out.println(str1 == str2);
System.out.println(str1.equals(str2));

在这里插入图片描述 可以查看编译后的class文件验证 在这里插入图片描述

首次发布

hezhongying.blog.csdn.net/article/det…