在比较两个对象时可以使用==和equals()。==用于比较两个对象的引用地址是否相等,而equals()方法主要用于比较两个对象的内容是否相等。
在Object中已定义了equals()方法,但是该方法直接采用==操作符实现,因此子类不重写该方法,那么子类对象在比较时将使用Object中定义的equals(),其结果与==操作符的比较结果是一样的。代码如下所示:
public class User { //用户名称 private String userName; //用户密码 private String password; public User(String userName, String password){ this.userName = userName; this.password = password; } /** * @param args */ public static void main(String[] args) { User user = new User("xiaoming", "123"); User user01 = new User("xiaoming", "123"); System.out.println(user.equals(user01)); } }
代码执行结果:false。
可是我们使用equals()目的在于,比较类对象中的内容是否相等。这执行结果显然不是我们要的结果。因此为了方便比较类对象的内容是否相等,在定义类时一般都建议重写equals()方法。代码如下:
public class User { //用户名称 private String userName; //用户密码 private String password; public User(String userName, String password){ this.userName = userName; this.password = password; } /** * 覆盖equals方法 */ public boolean equals(Object obj){ if(obj == null){ return false; } //如果是同一个对象返回true,反之返回false if(this == obj){ return true; } //判断是否类型相同 if(this.getClass() != obj.getClass()){ return false; } User user = (User)obj; return userName.equals(user.userName) && password.equals(user.password); } /** * @param args */ public static void main(String[] args) { User user = new User("xiaoming", "123"); User user01 = new User("xiaoming", "123"); System.out.println(user.equals(user01)); } }
代码执行结果:true。
我们还应该注意,Java语言对equals()的要求如下(来自Object的规范[JavaSE6]):
1. 对称性:如果x.equals(y)返回是"true",那么y.equals(x)也应该返回是"true"。
2. 反射性:x.equals(x)必须返回是"true"。
3. 类推性:如果x.equals(y)返回是"true",而且y.equals(z)返回是"true",那么z.equals(x)也应该返回是"true"。
4. 一致性:如果x.equals(y)返回是"true",只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是"true"。
5. 非空性,x.equals(null),永远返回是"false";x.equals(和x不同类型的对象)永远返回是"false"。
以上这五点是重写equals()方法时,必须遵守的准则,如果违反会出现意想不到的结果,请大家一定要遵守。
整理了这篇博客之后,对于重写Object的equals()方法,总觉得缺了点东西。后来又整理了一些知识点。感兴趣的朋友可以前往读一读:续重写equals()方法。
http://free9277.iteye.com/blog/1832363
重写了equals方法,别忘了也要冲洗hashCode哦。请看另一篇博客,重写hashCode()方法。http://free9277.iteye.com/admin/blogs/1832378
由于本人能力有限,博客中的内容难免会有错误。请各位朋友评判指出,别让我一错再错,哈。非常感谢!
相关推荐
String重写了equals方法,引用指向同一个地址,一定返回true。并且如果String包含的字符串 完全相同,同样返回true. public boolean equals(Object anObject) { if (this == anObject) { return true; } /
Object 类是所有类的父类,其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。他们都是通过比较地址来比较对象是否相等的
首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法
如果不是想使用object类,toString方法,可以重写此方法 equals方法 equals方法比较对象的是否相同 ==比较两个对象的内存地址 如果想表示对象的内容相同,返回true,则重写此方法 hashCode 返回一个hash code码,...
通过该案例代码,你可以学习如何在自己的类中正确重写equals()、hashCode()、toString()等方法,提高代码质量和可读性。 经验丰富的Java开发者:即使你已经有一定的Java开发经验,仍然值得深入了解Object类的使用。...
而Object的派生类ValueTpye重写了Equals方法,它比较的是两个对象的逻辑等同性。 也就是说,在C#里,引用类型的默认Equals版本关注的是引用等同性,而值类型关注的是逻辑等同性。当然,这并不总能
hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。 使用hashCode()和equals() hashCode()方法被用来获取给定对象的整数。这个整数被用来确定对象被...
要求覆盖基类Object中的ToString()方法和Equals()方法,使得直接输出Student对象时输出的是对象的id,name和age信息;并且当两个对象的学号相同时认为它们相等; 然后写一个主方法测试以上定义。
equals():反映的是对象或变量具体...根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。
前言 对于开发的程序员小伙伴,...equals:在Object中模式采用==比较,通常会重写 String对象重写了 equals,比较的是变量值 从上面我们笼统的来说明了一下两者的不同,那么接下来我们看看具体的区分 对象类型的比较
个人学习终结成果:为什么要重新equals和hashCode方法?如何重写?站好马步需从j2se基础开始
equals(父类是object,所以每个对象都会有equals): ojbect的 (源代码的149行):出厂默认的话equals等价于 == string 类重写equals:比较的是每一个字符是否相等 hashCode(重写equals就一定要重写hashCode...
为什么重写 equals() 时必须重写 hashCode() 方法? String String、StringBuffer、StringBuilder 的区别? String 为什么是不可变的? 字符串拼接用“+” 还是 StringBuilder? String#equals() 和 Object#equals() ...
==和 equals ()都是用于...所以,通常override(重写/覆写)java.lang.0bject 类的中equals()方法 按照自己的需要,在equals()方法中定义对象相等的含义。 String.equals () 注意:当此方法被重写时,通常有必要重写ha
equals是Object类的方法,Object对它的实现是比较内存地址,我们可以重写这个方法来自定义“相等”这个概念。比如类库中的String、Date等类就对这个方法进行了重写。综上,对于枚举类型和原始数据类型的相等性比较,...
主要介绍了Java中的Object类详细介绍,本文讲解了Object类的作用、Object类的主要方法、Object类中不能被重写的方法、Object类的equals方法重写实例等内容,需要的朋友可以参考下
如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。 3)默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法, 而Object的equals方法主要用于判断对象的内存地址引用是不是同一个...
上期呢我们对String的基本构造方法,源码进行了简单的总结,这期我们看看它比较更有魅力的地方,...可以看出,Object中的equals方法其实就是==,而String中重写了equals()方法把他修改成比较两个字符串是否相等。源码如
然后需要重写 Equals 方法。 public override bool Equals(object obj) { if (!obj.GetType().Equals(typeof(Customer))) { return false; } else { Customer answer = (Customer)obj; return (answer.ID ==...
掌握Object类中equals方法和toString方法的覆盖方法。 二、实验内容 1、设计一个名为figure的图形软件包(package)。包中包含三角形、矩形、圆三个类。要求:(1)每个类都要构造方法并为成员设置get和set方法;(2...