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

  1. package org.lyk.entities;
  2.  
  3. public class Point
  4. {
  5. private int x;
  6. private int y;
  7.  
  8. public Point(int x, int y)
  9. {
  10. this.x = x;
  11. this.y = y;
  12. }
  13.  
  14. @Override
  15. public int hashCode()
  16. {
  17. final int prime = 31;
  18. int result = 1;
  19. result = prime * result + x;
  20. result = prime * result + y;
  21. return result;
  22. }
  23.  
  24. @Override
  25. public boolean equals(Object obj)
  26. {
  27. if (obj == null)
  28. return false;
  29. if (this == obj)
  30. return true;
  31.  
  32. if (this.getClass() != obj.getClass())
  33. return false;
  34.  
  35. Point point = (Point) obj;
  36. if (this.x == point.x && this.y == point.y)
  37. return true;
  38. else
  39. return false;
  40.  
  41. }
  42.  
  43. }

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

  1. 比较第二个对象是否为空
  2. 比较两个对象的内存地址是否一致
  3. 比较两个对象的类型是否一致
  4. 比较两个对象的属性是否相同
  1. package org.lyk.main;
  2.  
  3. import org.lyk.entities.*;
  4.  
  5. public class Main
  6. {
  7. public static void main(String[] args)
  8. {
  9. Point p1 = new Point(1, 2);
  10. Point p2 = new Point(1, 2);
  11. System.out.println(p1.equals(p2));
  12. }
  13. }

上面的代码输出为true

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

  1. 调用super.equals()方法对父类相关属性的比较
  2. 在子类中增加对新增属性的比较
  1. package org.lyk.entities;
  2.  
  3. public class ColoredPoint extends Point
  4. {
  5. private String color;
  6.  
  7. public ColoredPoint(int x, int y, String color)
  8. {
  9. super(x, y);
  10. this.color = color;
  11. // TODO Auto-generated constructor stub
  12. }
  13.  
  14. @Override
  15. public boolean equals(Object obj)
  16. {
  17. if (obj == null)
  18. return false;
  19. if (this == obj)
  20. return true;
  21. if (!super.equals(obj))
  22. return false;
  23.  
  24. if (this.getClass() != obj.getClass())
  25. return false;
  26.  
  27. ColoredPoint cp = (ColoredPoint) obj;
  28. if (this.color == null && cp.color != null)
  29. return false;
  30. else if (!this.color.equals(cp.color))
  31. return false;
  32. else
  33. return true;
  34.  
  35. }
  36.  
  37. }

下面是测试代码:

  1. package org.lyk.main;
  2.  
  3. import org.lyk.entities.*;
  4.  
  5. public class Main
  6. {
  7. public static void main(String[] args)
  8. {
  9. ColoredPoint cp1= new ColoredPoint(1, 2, "RED");
  10. ColoredPoint cp2= new ColoredPoint(1, 2, "RED");
  11. System.out.println(cp1.equals(cp2));
  12. }
  13. }

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. SQL Server取系统当前时间【转】

    getdate //获得系统当前日期 datepart //获取日期指定部分(年月日时分表) getdate()函数:取得系统当前的日期和时间.返回值为datetime类型的. 用法:getdate( ...

  2. ios 企业发布

    ios 1. 支持的tls 协议 1.2 windows server 默认没有启用 检测的网站: https://www.ssllabs.com/ssltest 解决的方法: IIS crypto ...

  3. JS-unicode编码转换

    JS-unicode编码转换 <script type="text/Javascript"> var toUN = { on: function(str) { var ...

  4. SQL SERVER 拆分列为多行

    --创建测试表 )) insert into #temp(names) values('张三,李四'), ('中国,美国,巴西'), ('深圳,上海,北京,广州,哈尔滨'), ('足球,篮球,乒乓球, ...

  5. spring 中事务的PROPAGATION_REQUIRED,Readonly的解释

                 一.事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播 ...

  6. eclipse中tomcat加gc日志输出

    -XX:ParallelGCThreads=4 -XX:+PrintGCDetails

  7. 【maven】之使用jetty发布web项目

    <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin ...

  8. 45. Jump Game II

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  9. 【转】T-SQL 教程

    USE [test] GO /****** Object: StoredProcedure [dbo].[PageIndex] Script Date: 12/07/2011 10:26:36 *** ...

  10. Spark工程开发常用函数与方法(Scala语言)

    import org.apache.spark.{SparkContext, SparkConf}import org.apache.spark.sql.{SaveMode, DataFrame}im ...