提起 == 与 equals()区别,首先的反应是:== 比较的对象的地址,equals()比较的值,如下:
String str1=new String("123"); String str11=str1; System.out.println(str1==str11); //true String str2=new String("123"); System.out.println(str1.equals(str2)); //true System.out.println(str1==str2); //false
初次面试时被问到这样的问题,感觉太简单了,后面还偶有面试官会问到,难道还有什么其他的区别?查资料,果然查缺可补漏,如下:
//1.常量之间, ==的使用:
int a1=10; int a2=10; System.out.println(a1==a2); //true String s1="abc"; String s2="abc"; System.out.println(s1==s2); //true
常量值是放在直接内存的常量池中,以HashSet策略存储起来,多个相同的常量值在池中只会存一份地址;
基本数据类型和String常量可以直接通过==比较;
//2.equals(),先来看一下方法的实现:
可以看到,equal方法首先是通过 == 比较的,如果地址相等返回true,否则比较对象中的每个字符的内容是否相等;
我们也可以完全重写equals(),按照自己设定的规则进行对象的比较;
3.总结:
==,比较对象地址、基本数据类型、String常量;
equals(),先比较地址,不相等再比较对象中每个字符是否相等,也可以重写设定比较规则;
参考查询资料地址:https://blog.csdn.net/lcsy000/article/details/82782864