java中equals()方法详解

请看下面这两个类

和这个类

第一个类的输出结果为false
第二个为ture和false
为什么第一个类是false呢,第一个类的v1和v2是对象的引用,然而i本身就只开辟了一个存储空间,第一个类不应该是v1和v2都是直接指向i所处的存储空间嘛,为什么会是false,应该是ture才对啊,看到这两个类,对equals()方法感觉模糊,请指教
现在自己本身没有悬赏值,我去赚一点,待会挂点悬赏请见谅

因为你的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结果可能会不同
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-05-25
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方法(你可以看它的源码),比较的是值是否相等。
第2个回答  2015-05-25
第一个类V1和V2都是一个对象引用啊,指向不同的内存地址的,i只是对象的成员

equals简介
在Java中,String类中的equals()方法是其从Object类继承而来的重要成员。它的主要作用是判断两个对象是否内容相等,即比较它们存储的字符序列,这个过程是区分大小写的。相比之下,双等号"=="在使用上则有所不同。当我们用它来比较基本数据类型(如整数、字符等)时,如果两个变量的值相等,返回的结果...

equals()和hashCode()方法详解
equals()方法用于比较两个对象的内容或引用是否相等,主要用于对象间的比较。而hashCode()方法则生成一个整数哈希值,用于快速定位和比较对象在集合中的位置,如HashSet、HashMap等。设计这两个方法时,应遵循以下原则:1. 如果两个对象被认为是相等的(即通过equals()方法比较结果为true),那么它们的has...

java中equals使用方法
答案:Java中的equals方法用于比较两个对象的内容是否相等。默认情况下,equals方法比较的是对象的引用,也就是内存地址。但是,许多类已经重写了这个方法,使其比较的是对象的实际值。在使用时,需要注意对象是否重写了equals方法。如果没有重写,则需要自定义比较逻辑。详细解释:1. 基本用法与意义:在Java...

equals()是什么意思?
equals()是Java中的一个方法,一般是用来比较两个对象是否相等。这个方法的返回值是一个布尔类型,如果两个对象相等,则返回true,否则返回false。通常情况下,我们使用equals()方法比较两个对象时,需要注意对象的类型和属性是否相同。需要注意的是,在Java语言中,equals()方法一般需要与hashCode()方法配合...

equals()方法理解
同时,遵循Java规范,当重写equals方法时,也应重写hashCode方法。这是因为在哈希表中,equals为true的对象,其hashCode方法返回的整数应相同。默认的hashCode方法是基于内存地址计算的,若仅重写equals方法而未重写hashCode方法,可能违反了规范,因为即使两个对象相等,它们的内存地址通常不同,从而返回的hashCode...

Java中equals()方法与==的区别
String str3 = "hello world";System.out.println(str1 == str3); \/\/ 输出:false 而使用 `equals()` 方法,无论字符串内容是否相同,只要它们代表的是同一个字符串实例,`equals()` 就会返回 `true`。如:java System.out.println(str1.equals(str3)); \/\/ 输出:true 为了使 `==` ...

.equals()到底是什么意思?
实际上,".equals()"比较的是对象的引用地址,这是由Java语言的内部机制决定的,而非程序员可以控制。如果一个类没有重写"equals()"方法,那么它默认比较的就是对象的内存地址,而非内容,即使对象的属性值相同,也可能返回false。然而,如果类已经重写了"equals()"方法,情况就有所不同。在这种情况...

.equals是什么意思?
.equals()是一个Java中的方法,可以用来比较两个对象是否相等。这个方法所做的比较不是基于对象的引用地址,而是基于对象的值来进行的。当我们使用.equals方法进行比较时,它会首先检查两个对象的类型是否相同。如果类型相同,就进一步比较两个对象的值是否相等。如果两个对象的值都相等,.equals方法会返回...

JAVA中字符串比较equals和equalsIgnoreCase的区别
1、使用equals( )方法比较两个字符串是否相等。它具有如下的一般形式:boolean equals(Object str)这里str是一个用来与调用字符串(String)对象做比较的字符串(String)对象。如果两个字符串具有相同的字符和长度,它返回true,否则返回false。这种比较是区分大小写的。2、为了执行忽略大小写的比较,可以...

java中equals和equalsignorecase的区别
equals比较时,要比较大小写是否相同,而后者,忽略了大小写,ignore就是忽略的意思 如,abc与Abc,前者返回false,后者返回true

相似回答