`
djob2008
  • 浏览: 127391 次
  • 性别: 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()

……….

 

分享到:
评论

相关推荐

    C#本质论(第3版)

    9.1.3 重写equals() 9.1.4 相等性实现的指导原则 9.2 运算符重载 9.2.1 比较运算符 9.2.2 二元运算符 9.2.3 赋值运算符与二元运算符的结合 9.2.4 条件逻辑运算符 9.2.5 一元运算符 9.2.6 转换运算符 ...

    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 ...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    9.1.3 重写Equals() 256 9.2 操作符重载 263 9.2.1 比较操作符 264 9.2.2 二元操作符 265 9.2.3 赋值与二元操作符的结合 266 9.2.4 条件逻辑操作符 266 9.2.5 一元操作符 267 9.2.6 ...

    疯狂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基础知识点总结.docx

    equals()方法和hashCode()方法 270 数据结构 273 Array方法类汇总 304 Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下...

Global site tag (gtag.js) - Google Analytics