java的string和==和equals和hashcode简单理解
String s1= "abc";
s1是引用变量,在栈里面,如果java的String常量池中没有abc,则开拓一块区域存abc,s1指向常量池中的abc;
String s2= new String("abc");
s2是引用变量,在栈里面;
new String()会在堆中开辟一块空间,新增一个String对象;
而String对象存的也是指向常量池abc的地址;
==
对于8种基本数据类型,比较值
对于引用数据类型,比较引用
equals
object中比较的是引用地址
8中基本数据类型重写了equals方法,比较的是值
一个普通对象默认没有重写equals方法
重写equals为什么一定要重写hashcode
因为如果不重写hashcode,会出现equals相等,而hashcode不等的情况,这违反object的一个默认的散列规则
——hashcode必须相等,euqals才可以相等,否则在hash集合中会出现问题