因为你的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结果可能会不同