JAVA中复写equals方法
在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方法一般步骤。
- 比较第二个对象是否为空
- 比较两个对象的内存地址是否一致
- 比较两个对象的类型是否一致
- 比较两个对象的属性是否相同
- 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方法要增加两项:
- 调用super.equals()方法对父类相关属性的比较
- 在子类中增加对新增属性的比较
- 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方法的更多相关文章
- 关于Java中的equals方法
关于Java中的equals方法 欢迎转载,但是请填写本人的博客园原址https://www.cnblogs.com/JNovice/p/9347099.html 一.什么是equals方法 equa ...
- 【转】彻底弄懂Java中的equals()方法以及与"=="的区别
彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...
- 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?
Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...
- Java中“==”与equals方法的区别
1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:St ...
- JAVA中“==”与equals()方法区别
equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...
- 如何在Java中避免equals方法的隐藏陷阱
摘要 本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性. 在<Effective Java>的第8项中,Josh Bloch描述了当继 ...
- 如何重写Java中的equals方法
Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...
- java中的equals方法
这个方法首先比较的是两个对象的地址是否相同,如果相同直接返回true, 否则, (1)如果是string类型的先比较是否是string类型,是的话,再比较是否长度相同,相同的话再比较,每个字符是否相同 ...
- Java中的equals方法和自定义比较器
Object中的equals()方法默认是按地址比较,而不按内容进行比较, public boolean equals(Object obj) { return (this == obj); } 在S ...
随机推荐
- SQL Server取系统当前时间【转】
getdate //获得系统当前日期 datepart //获取日期指定部分(年月日时分表) getdate()函数:取得系统当前的日期和时间.返回值为datetime类型的. 用法:getdate( ...
- ios 企业发布
ios 1. 支持的tls 协议 1.2 windows server 默认没有启用 检测的网站: https://www.ssllabs.com/ssltest 解决的方法: IIS crypto ...
- JS-unicode编码转换
JS-unicode编码转换 <script type="text/Javascript"> var toUN = { on: function(str) { var ...
- SQL SERVER 拆分列为多行
--创建测试表 )) insert into #temp(names) values('张三,李四'), ('中国,美国,巴西'), ('深圳,上海,北京,广州,哈尔滨'), ('足球,篮球,乒乓球, ...
- spring 中事务的PROPAGATION_REQUIRED,Readonly的解释
一.事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播 ...
- eclipse中tomcat加gc日志输出
-XX:ParallelGCThreads=4 -XX:+PrintGCDetails
- 【maven】之使用jetty发布web项目
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin ...
- 45. Jump Game II
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 【转】T-SQL 教程
USE [test] GO /****** Object: StoredProcedure [dbo].[PageIndex] Script Date: 12/07/2011 10:26:36 *** ...
- Spark工程开发常用函数与方法(Scala语言)
import org.apache.spark.{SparkContext, SparkConf}import org.apache.spark.sql.{SaveMode, DataFrame}im ...