在JAVA中“==”用于比较两个引用对象的地址是否相同。但是如果我们想比较两个对象的内容是否相同,通常会覆写equals方法。equals方法用来比较两个对象的内容是否相等.

package org.lyk.entities;

public class Point
{
private int x;
private int y; public Point(int x, int y)
{
this.x = x;
this.y = y;
} @Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
} @Override
public boolean equals(Object obj)
{
if (obj == null)
return false;
if (this == obj)
return true; if (this.getClass() != obj.getClass())
return false; Point point = (Point) obj;
if (this.x == point.x && this.y == point.y)
return true;
else
return false; } }

上面的代码演示了覆写equals方法一般步骤。

  1. 比较第二个对象是否为空
  2. 比较两个对象的内存地址是否一致
  3. 比较两个对象的类型是否一致
  4. 比较两个对象的属性是否相同
package org.lyk.main;

import org.lyk.entities.*;

public class Main
{
public static void main(String[] args)
{
Point p1 = new Point(1, 2);
Point p2 = new Point(1, 2);
System.out.println(p1.equals(p2));
}
}

上面的代码输出为true

上面的代码很好理解。但是倘若我们对Point做派生,也就是说现在有一个ColoredPoint类继承了Point,并且扩充了一个color属性,那么我们在派生类中的equals方法要增加两项:

  1. 调用super.equals()方法对父类相关属性的比较
  2. 在子类中增加对新增属性的比较
package org.lyk.entities;

public class ColoredPoint extends Point
{
private String color; public ColoredPoint(int x, int y, String color)
{
super(x, y);
this.color = color;
// TODO Auto-generated constructor stub
} @Override
public boolean equals(Object obj)
{
if (obj == null)
return false;
if (this == obj)
return true;
if (!super.equals(obj))
return false; if (this.getClass() != obj.getClass())
return false; ColoredPoint cp = (ColoredPoint) obj;
if (this.color == null && cp.color != null)
return false;
else if (!this.color.equals(cp.color))
return false;
else
return true; } }

下面是测试代码:

package org.lyk.main;

import org.lyk.entities.*;

public class Main
{
public static void main(String[] args)
{
ColoredPoint cp1= new ColoredPoint(1, 2, "RED");
ColoredPoint cp2= new ColoredPoint(1, 2, "RED");
System.out.println(cp1.equals(cp2));
}
}

JAVA中复写equals方法的更多相关文章

  1. 关于Java中的equals方法

    关于Java中的equals方法 欢迎转载,但是请填写本人的博客园原址https://www.cnblogs.com/JNovice/p/9347099.html 一.什么是equals方法 equa ...

  2. 【转】彻底弄懂Java中的equals()方法以及与"=="的区别

    彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...

  3. 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?

    Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...

  4. Java中“==”与equals方法的区别

    1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:St ...

  5. JAVA中“==”与equals()方法区别

    equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...

  6. 如何在Java中避免equals方法的隐藏陷阱

    摘要 本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性. 在<Effective Java>的第8项中,Josh Bloch描述了当继 ...

  7. 如何重写Java中的equals方法

    Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...

  8. java中的equals方法

    这个方法首先比较的是两个对象的地址是否相同,如果相同直接返回true, 否则, (1)如果是string类型的先比较是否是string类型,是的话,再比较是否长度相同,相同的话再比较,每个字符是否相同 ...

  9. Java中的equals方法和自定义比较器

    Object中的equals()方法默认是按地址比较,而不按内容进行比较, public boolean equals(Object obj) { return (this == obj); } 在S ...

随机推荐

  1. Iaas-cloudstack概念

    管理serverother high end ports     tomcat20400                     tomcat     server.xml               ...

  2. 09_android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例

    根据08_android入门_android-async-http开源项目介绍及使用方法的介绍,我们通过最常见的登陆案例进行介绍android-async-http开源项目中有关类的使用.希望对你学习 ...

  3. HTTP API 设计指南(中文版) restfull

    http://www.css88.com/archives/5121 目录 基础 总是使用TLS 在Accepts头中带上版本号 通过Etags支持缓存 用Request-Ids追踪请求 用Range ...

  4. oracle 行转列的例子

    with test as(select '1' bit from dual union select '0' from dual )select replace(sys_connect_by_path ...

  5. html标记语言的标准写法-参考自http://www.zhihu.com/question/20797118/answer/16212312

    网页头部的声明应该是用 lang="zh" 还是 lang="zh-cn"?   添加评论   查看全部 12 个回答   skydiver ,程序员 5 人赞 ...

  6. [linux] linux下编译安装zlib

    zlib官方网站:http://www.zlib.net上下载源码来安装zlib软件包. 目前最新版本zlib是zlib1.2.8,安装开始:$wget http://www.zlib.net/zli ...

  7. App开发者必备的运营、原型、UI设计工具整理

    移动应用开发者们,Attention please!在接下来的内容里,我们将介绍一些能够提高你们的应用的知名度和品质水平的工具. 仔细看看,下面这些工具你们都知道吗,用过吗?如果你还不知道,或许可以尝 ...

  8. js中的script标签

    在页面中用script标签引入javascript文件(<script type="text/javascript" src="js文件地址">&l ...

  9. 使用 Windows PowerShell 来管理和开发 windowsazure.cn 账户的特别注意事项

    6月6日,微软面向中国大陆用户开放了Microsoft Azure公众预览版的申请界面.大家可以申请免费的 beta 试用,收到内附邀请码的通知邮件后只需输入激活码即可开始免费试用.具体网址为: ht ...

  10. gcc内嵌汇编详解

    [作者:byeyear    首发:cnblogs    Email:east3@163.com    转载请注明] 有时候我们希望在C/C++代码中使用嵌入式汇编,因为C中没有对应的函数或语法可用. ...