java中equals()方法详解
发布网友
发布时间:2022-04-27 09:11
我来回答
共3个回答
热心网友
时间:2023-09-17 03:21
因为你的Value类没有重写equals 方法,这个方法是在Object类中定义的,是可以自己按照需要进行重写的,如果没有重写,其默认的逻辑是比较两个相互equals 的对象的内存地址是不是同一个地址,第一个输出的时候v1,v2都是new出来的,所以v1和v2在堆中是不同的内存地址,所以equals结果为false
第二个输出,其调用的是Integer类的equals,Integer类中有重写原有equals方法的逻辑,其逻辑是比较两个Integer对象中封装的数字的值,如果相同就返回true,因此第二个输出true
第三个输出false原理同第一个,两个对象之间使用==比较的就是内存地址,因为都是new出来的,堆内存地址不同,所以输出false
简单来讲,如果来自同一个类的两个对象,如果没有重写equals方法的逻辑,其==结果和equals结果是相同的,如果有重写equals方法,则==和equals结果可能会不同
热心网友
时间:2023-09-17 03:21
v1.i = v2.i = 100 并不是对象引用的意思,而是对2个对象的变量 i 赋值100。
如果写成
v1.i =100;
v2.i = 100;
是不是更看得清楚,所以最好还是别偷懒
Value类没有重载equals方法,所以是用的Object的equals实现,v1.equals(v2)是比较两个对象地址是否相同,显示v1和v2是两个不同的对象,所以为false。
Integer有重载equals方法(你可以看它的源码),比较的是值是否相等。
热心网友
时间:2023-09-17 03:22
第一个类V1和V2都是一个对象引用啊,指向不同的内存地址的,i只是对象的成员