• 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方法一般步骤。

    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)); 
        }
    }
  • 相关阅读:
    Weebly轻松创建个人网站
    人生如游戏
    1 欧拉角与四元数计算机动画笔记
    图形学相关的一些数学基础书
    1047 Student List for Course (25 分)
    1124 Raffle for Weibo Followers (20 分)
    1065 A+B and C (64bit) (20 分)
    1036 Boys vs Girls (25 分)
    1039 Course List for Student (25 分)
    1054 The Dominant Color (20 分)
  • 原文地址:https://www.cnblogs.com/kuillldan/p/5574087.html
Copyright © 2020-2023  润新知