1.在java学习中经常会不知觉的听到或想到==与equals的区别这个问题,下面是本菜鸟的一些总结。
2.==
==在Java中比较的是堆内地址值,如果两者相等,那则说明这两个的引用指向同一个地址。
结果:true、false、true、false,基本数据类型在Java中是作为常量在方法区里面常量池中,在常量池中一个常量只对应一个地址,所以无论多少111都只会指向一个地址、所以为true,字符串也是一样的。因此比较基本数据类型与字符串类型可以用==比较。
基本类型的包装类型
结果:true、fasle,这是因为再java中Integer包装类中[-127,127]之间的数据保存在常量中,128不属于这个范围于是就在堆中new了一个对象来保存128,i3、i4都是在堆中new对象来保存的地址值不同所以为false
对于对象来说
结果:false 在java创建对象new过程中在堆中生成对应的地址,只要new了一次就会重新创建一个地址所以判断为false
那我们只想比较对象中的属性值不想比较地址值怎么办 所以equals的作用就来了
Equals
根据实际业务比较两个对象是否相等。默认是不重写是==比较。
在实际开发中在实际开发中,我们一般比较对象都是通过对象的属性值进行比较(一般比较对象的地址没有多大用处),所以我们会重写Object中的此方法,把自己的判断机制写在方法里面;
结果:false 如图所示默认不重写equals方法他还是按照==去判断
在Person类中重写Object中的equals方法
结果:true