`
djob2008
  • 浏览: 131233 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

重写equals()方法小结

JDK 
阅读更多

l 操作符“==”用来比较两个操作元是否相等,这两个操作元既可以是基本类型,也可以是引用类型

l java.lang.Object类中定义了equals()方法,用来比较两个对象是否相等“==”两边都是引用类型的变量时候,这两个引用变量必须都引用同一个对象,结果才为true;“==”两边的变量被显式声明的类型必须是同种类型或有继承关系,即位于继承树的同一个继承分支上。

Dog dog=new Dog();

Creature creature=dog;

Animal animal=new cat();

System.out.println(dog==animal);//合法,false

System.out.println(dog==creature);//合法,true

Dog dog=new Dog();

Cat cat=new Cat();

System.out.println(dog==cat);//编译出错

JDk中有些类覆盖了Object类中的equals()方法,他们的比较规则为:如果两个对象的类型一致,并且内容一致,则返回true

Integer int1=new Integer(1);

Integer int2=new Integer(1);

System.out.ptint(int1==int2);//false

System.out.ptint(int1.equals(int2));//true

 

 

 

今日仔细对比了equals方法和==在判断两个对象关系时原理及其相关的内存细节,整理了一下重写equals()方法的步骤:

 

l 首先应该测试两个引用是否指向同一个对象,如果是则直接返回true。这一步不是必须的,但可以提高比较时的性能,因为如果两个引用指向同一个对象,其equals测试肯定返回true,不再去比较任何内容

l 接下来应该测试传递进来的对象引用是否为null,如果是则直接返回false

l 然后测试传递进来的对象引用是否通过自己类型的instanceof测试,如果不通过则返回false,因为传递进来的对象一定是object型,也就是说指向的对象有可能是其他类型的,若是其他类型则没可比性的

l 将传进来的引用强制类型转换为自己的类型,测试相关的成员是否相等,成立则返回true,否则返回false

注意:重写equals方法时访问限制必须为public,因为object类中的该方法已经是public类型,重写方法的访问限制只能与原来相同或比原来宽;方法入口参数必须为object类型,不可以是其他的类型。

Class Student{

String name;

Int age;

Public Student(){}

Public Student(String name,int age){

This.name=name;

This.age=age;

}

Public Boolean equals(object o){

If(this==o){return true;}

If(o==null){return false;}

If(!(o instanceof Student)){return false;}

Student s=(Student)o;

If(this.name.equals(s.name)&&this.age==s.age)

{return true;}

Else {return false;}}}

//重写haseCode()

……….

 

分享到:
评论

相关推荐

    Java中==与equals的区别小结

    默认情况下,所有对象都有一个`equals()`方法,它源自`Object`类,这个方法同样比较的是对象引用,但`String`类重写了这个方法,使得它比较的是字符串的内容,即两个字符串中字符序列是否相同。因此,当使用`equals...

    Equals和==的区别 公共变量和属性的区别小结

    当比较两个对象时,如果它们是引用类型,并且没有重写Equals方法,那么默认情况下使用的是引用比较,即使用==运算符的方式。但许多类型会重写Equals方法以实现更深层次的内容比较,比如String类型就重写了Equals以...

    Java中equals与==的用法和区别

    小结 在 Java 中,== 操作符比较的是变量的值或地址值,而 equals() 方法比较的是对象的内容。对于基本类型的变量,== 操作符比较的是值是否相同;对于引用类型的变量,== 操作符比较的是地址值是否相同。equals() ...

    有关jave基本类的学习小结

    5. `equals()`方法可以被子类重写以实现自定义的相等性检查,例如String类就重写了`equals()`方法,使其比较字符串内容而不是内存地址。 理解`equals()`方法和`==`运算符的区别对于编写高质量的Java代码至关重要。...

    java面试题(1).pdf

    对于自定义的类(例如Cat),如果没有重写equals方法,则它默认的行为是与==相同,即比较的是对象的引用。 ```java class Cat { private String name; // 其他成员变量、方法和构造器 public boolean equals...

    集合小结 Collection

    ### 集合小结 Collection #### Java集合概述 Java中的集合是一组对象的组合,类似于C++标准模板库中的容器。但是与C++不同的是,Java集合不仅可以存储单一类型的数据,还可以存储不同类型的对象。这使得Java集合...

    Java软件开发实战 Java基础与案例开发详解 6-2 object类 共7页.pdf

    ### 小结 `Object`类提供了许多基本而强大的功能,包括`toString()`、`equals()`、`hashCode()`、`getClass()`以及`clone()`等方法。通过理解和适当重写这些方法,开发者可以更好地控制对象的行为,并提高代码的...

    javaSE代码实例

    14.2 重写equals与hashCode方法 273 14.2.1 重写equals方法 273 14.2.2 重写hashCode方法 275 14.3 集合框架的层次结构 -277 14.4 Ordered与Sorted的接口 278 14.4.1 Ordered的排序 278 14.4.2 Sorted的...

    JAVA软件工程师_Java入门视频教程

    小结 [第9节] 1.2.1为什么需要封装1 [第10节] 1.2.1为什么需要封装2 [第11节] 1.2.2如何实现封装2 [第12节] 1.2.3如何使用包1 [第13节] 1.2.3如何使用包2 [第14节] 1.2.4类成员的访问控制1 [第15节] 1.2.4类成员的...

    21天学通Java-由浅入深

    162 8.5.8 重写equals方法 163 8.6 final与继承的关系 164 8.7 abstract与继承的关系 165 8.8 什么是多态 166 8.9 什么是枚举类 168 8.10 什么是反射机制 169 8.11 什么是泛型 170 8.12 综合练习 172 8.13 小结 172 ...

    Java 学习课件,继承和多态

    #### 小结 - **继承与多态是Java面向对象编程的核心概念**。正确理解并运用这些概念可以帮助开发者写出更高质量、更易于维护的代码。 - **注意**:虽然继承和多态非常有用,但在实际项目中应当适度使用,过度依赖...

    疯狂JAVA讲义

    1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...

    每个学Java的人都应该搞懂的问题

    #### 小结 以上讨论的Java经典问题涵盖了字符串处理、对象引用比较、不可变性原则以及基本数据类型的默认值等内容。理解这些概念对于编写高质量的Java程序至关重要。此外,正确使用 `final` 关键字能够帮助开发者更...

    java List去掉重复元素的几种方式(小结)

    _注意_:当数据元素是实体类时,需要额外重写_equals_()和_hashCode_()方法,以便正确地比较对象的相等性。例如,以学号为依据判断重复: ```java public class Student { String id; String name; int age; ...

    面试常见题.docx

    - 重写发生在子类与父类之间,子类覆盖父类的同名方法,要求返回类型相同,参数列表完全一致,且访问权限不能更低,异常处理不能更广泛。 8. **不能根据返回类型区分重载**:返回类型不能作为重载的唯一依据,因为...

    第4章(类的重用).ppt

    7. **本章小结**:综合以上内容,本章介绍了如何通过继承、组合和使用包来有效重用和组织类,提高代码的结构和可读性。同时,讲解了抽象类和终结类在控制类继承和方法重写上的作用,以及如何正确利用Object类提供的...

    2018-java面试记录

    ### 小结 掌握上述Java基础知识对于准备面试非常重要。修饰符、字符串处理、HTTP方法选择以及抽象类与接口的概念是Java程序员需要熟悉的核心概念。希望本文能够帮助你在Java学习之旅中取得进步!

    Tedu正则表达式与Object与自动装箱与拆箱

    #### 小结 本文介绍了正则表达式的基础语法及其在 Java 字符串中的应用,并详细讨论了 `String` 和 `StringBuilder` 类的特性和方法。同时,还解释了 `Object` 类的重要性以及自动装箱和拆箱的概念。这些知识点对于...

    湖北汽车工业学院Java实验一 Java编程环境使用

    #### 小结 本实验旨在帮助学生掌握Java开发环境的搭建与使用,理解Java语言的基础知识和String类的使用技巧。通过实践操作,学生不仅能够熟悉Java的开发流程,还能加深对面向对象编程的理解。这对于进一步学习更复杂...

Global site tag (gtag.js) - Google Analytics