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集合中会出现问题

原文地址:https://www.cnblogs.com/whoknows1/p/9962000.html