关于==和equals的小结

来源:互联网 发布:linux性能监控 知乎 编辑:程序博客网 时间:2024/06/05 14:38

等号:比较的是地址

1.基本类型的比较:

因为基本类型都是存在栈里面的,Int a=3;当你int b=3的时候,jvm会干嘛呢?首先,它会去栈里面找是不是已经有一个数据为3了。如果不是的话新建一个地

址,是的话,就把b指向这个地址,所以对于基本类型来说,当值相同的时候,地址也是相同的,所以当你对基本类型==的时候,内容相同的肯定返回的是true因为实质上,他们的地址也是相同的.


2.引用类型的==:

2.1  String类型

字符串不是基本数据类型,而是对象。 java采用不变模式来设计了字符串对象。
约定为如果不强制使用 new 运算符而是直接给值的话,如果内容相同,那么两者是同一个对象


所以 str2是强制使用了new String(); 强制要求系统生成一个新的对象,而不是获取己有对象的别名。



2.2其他引用类型==:


很明显,通过for循环new5User类的对象,如果list不包含当前对象的hash值,就加入到list对象中。List的大小为5,说明每new一个User对象,都是存在堆里面的动态分配内存,所以==的时候,当然内存地址是不一样的。


Equals:比较的hashcode(hash)

1.String类型

只要值相同,hashcode相同,那么equals方法返回就为true


2.其他引用类型



0 0