java中==和equals的区别
在初期学习java时,肯定会遇到==和equals的区别这一知识点,其实很简单,一句话:equals:比较字面值;==:不止比较字面值,还比较对象的内存地址。
先来一段代码:
1 @Test 2 public void test(){ 3 String str1="abc"; 4 String str2="abc"; 5 System.out.println(str1==str2); 6 System.out.println(str1.equals(str2)); 7 //结果都为true,因为str1创建时在堆中开辟了一块新的内存,存储abc,str则保存在栈中,而str2在创建时,由于abc已经 8 //存在,所以直接把内存地址给str2,而没有重新开辟新的内存地址,所以,打印结果都是true 9 String str3=new String("def"); 10 String str4=new String("def"); 11 System.out.println(str3==str4); 12 System.out.println(str3.equals(str4)); 13 //==打印的是false,equals打印的是true,因为new String 不管之前的内容是否在内存中已经存在 14 //在新定义时,都会重新开辟一块内存来存储这块内容,从而str3和str4的内存地址是不同的。 15 16 }
追一下源码:

从new String()的源码可以看出,new String()会更改hash值,因为重新new出来的对象是会在堆中开辟内存来存储新对象的,内存地址不同,==所返回的值肯定是不同的。
另外,String重写了hashCode方法和equals方法;
🌈😀路漫漫其修远兮
吾将上下而求索😀🌈

浙公网安备 33010602011771号