java中经常使用“==”和equals()方法来判断对象是否相等,下面就来说下怎么判断两个对象相等。
每个在堆上的对象都会有它的引用变量,如果对象没有引用变量引用,堆上的GC就会找它。
“==”的比较,符号两边都是对象的引用变量,如果比较返回true的话,那就表示符号两边的引用变量引用的是同一个对象,因为“==”比较的是引用变量内的值,所以“==”比较就是引用比较。
但是如果是比较两个不同对象在意义上是否相同的呢?比如两个Student对象,对象的实例变量name,sex都一样,我们能否认为它们是两个相等的对象。
equals()方法
这就要用到equals()方法,首先我们要知道的是equals()方法是Object这个所有类的父类中就被定义了。在Object中equals的比较方式跟“==”类似,也是只有比较的两个对象为同一个对象时才会返回true,否则都会返回false。所以我们在类中就会重写equals()方法来完成堆上两个不同对象在意义上是否相同,在重写equals()方法之前我们还要重写hashcode()方法,因为我们再调用equals()方法的时候,它会先将两个对象的hashcode()返回的值进行比较,如果不相同就会返回false,我以我们在重写hashcode()方法时会让同类的所有对象都返回一个相同的hashcode值,通过在hashcode()方法中声明一个result变量值,例如,
[code=”java”]public int hashCode() {
int result=17;
result=31*result+name!=null?name.hashCode():0;
result=31*result+region!=null?region.hashCode():0;
result=31*result+position!=null?position.hashCode():0;
return result;
}
然后回到equals()方法判断两个对象的实例变量是否相同,如果相同则equals()方法返回true,如果实例变量不同则会返回false;
所以我们要怎么重写equals()方法,需要看具体的类,因为每个类的实例变量都不同,(新建一个对象的话如果没有特殊的构造函数,实例变量会有默认值,所以新建的两个不同类型也是相等的,因为实例变量都是默认值即相同)。
在String类中的equals()方法是已经被重写过的
分享到:
相关推荐
在JVM内存中,基本数据类型的变量和对象的引用变量存储于栈空间,而堆空间用于存放new操作创建的对象和数组。当堆中生成一个对象或数组后,栈中定义的引用变量会指向堆中的首地址,从而实现对对象或数组的访问。 在...
在Java编程语言中,相等性是理解和使用对象时至关重要的概念。本篇文章将深入剖析“==”运算符和equals()方法的区别与联系,帮助你在Java的笔试和面试中更好地应对相关问题。 首先,“==”运算符在Java中用于比较...
JAVA 中“相等性比较”的实现技巧 在 Java 编程过程中,比较数据是否相等是经常遇到的问题。 Java 语言的数据类型分为基本类型和引用类型。...Java 中的相等性比较需要考虑到数据类型、内存管理方式和对象的比较规则。
但是,判断引用类型的变量是否相等,==表示“引用是否相等”,或者说,是否指向同一个对象。例如,下面的两个String类型,它们的内容是相同的,但是,分别指向不同的对象,用==判断,结果为false: public class ...
在Java编程语言中,深入理解和熟练运用引用、`this`关键字以及对象比较是提升编程技能的关键环节。本课程“MLDN魔乐JAVA_09深入引用、this关键字、对象比较”将带你深入探讨这些核心概念。 首先,让我们来讨论...
- **引用传递**:对于引用类型,传递的是对象引用的一个副本,这意味着方法获得的是对象在内存中的地址的一个拷贝。因此,即使在方法中修改引用所指向的对象(例如,修改`StringBuffer`的内容),原始引用也会受到...
6. **equals()和==**:在比较对象时,`equals()`方法会检查对象的内容是否相等,而`==`则检查引用是否指向同一个对象。对于向上转型的对象,`equals()`方法会根据重写的情况来判断,而`==`始终比较引用。 7. **匿名...
本章我们将深入探讨Java中的核心概念——变量、数据类型和运算符,这些都是编写任何Java程序的基础。 首先,让我们从“变量”开始。在Java中,变量是用来存储数据的容器。每个变量都有一个特定的数据类型,它决定了...
1. **对象引用**:在Java中,我们并不直接操作对象本身,而是通过对象引用来操作对象。当我们声明一个对象变量时,实际上是声明了一个指向对象的引用,而非对象本身。例如,`Car myCar = new Car();` 这里`myCar`...
对象实体与对象引用有何不同? 对象的相等和引用相等的区别 类的构造方法的作用是什么? 如果一个类没有声明构造方法,该程序能正确执行吗? 构造方法有哪些特点?是否可被 override? 面向对象三大特征 封装 继承 多态 ...
`null`表示变量没有引用任何对象,而`""`则表示一个长度为零的字符串。在Java中,String对象是不可变的,这意味着一旦创建,就不能更改其值。 错误用法1:`if (name == "")`,这种情况下,即使name为空字符串,条件...
首先,我们需要理解Java中的对象和属性。在Java中,一个类可以定义为对象的蓝图,而对象则是类的实例,包含了类中定义的属性(也称为字段)和方法。属性是用来存储数据的变量,它们是对象的状态的一部分。例如,一个...
深入理解Java对象的状态、引用种类以及垃圾回收的形式对于提升代码质量和性能至关重要。通过合理利用不同类型的引用和理解垃圾回收机制,可以在资源受限的环境中优化程序的内存使用,避免内存泄漏和性能瓶颈,从而...
"Java 类和对象实验" Java 是一种面向对象的编程语言,它的核心概念是类和对象。类是对象的蓝图,它定义了对象的属性和行为。对象是类的实例,它具有自己的状态和行为。 在 Java 中,类的定义包括成员变量、构造...
4. 对象实例和对象引用的区别:对象实例是实际存在的对象,而对象引用是指向对象实例的变量。 变量和方法 1. 成员变量和局部变量的区别:成员变量是类的成员变量,而局部变量是方法或构造器中的变量。 2. 作用...
栈主要用于存储基本类型变量和对象的引用,而堆则是用于存储由`new`关键字创建的对象和数组。 栈内存的特点在于它的快速存取和自动管理。当在代码中定义一个局部变量时,Java会在栈中为这个变量分配内存。一旦超出...
在这个PPT教案中,主要探讨了Java中的类和对象的概念及其重要特性。 首先,类是面向对象编程的基础,它定义了一组属性(状态)和行为(方法)。类封装了对象的状态和行为,使得数据和操作数据的函数结合在一起,...
实验的目标是用类实现这些几何图形的面积和周长计算,从而加深对Java类和对象的理解。 首先,我们来看三角形类(Trangle)。这个类包含了三个边(sideA, sideB, sideC)和一个布尔变量boo,用于验证输入的三条边是否...