zoukankan      html  css  js  c++  java
  • java覆写equals方法

    何时需要重写equals()

    当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。

    object规范规定,如果要重写equals(),也要重写hashcode()

    如何覆写equals()

    覆写equals方法

    1  使用instanceof操作符检查“实参是否为正确的类型”。

    2  对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值。

    3. 对于非float和double类型的原语类型域,使用==比较;

    4  对于对象引用域,递归调用equals方法;

    5  对于float域,使用Float.floatToIntBits(afloat)转换为int,再使用==比较;

    6  对于double域,使用Double.doubleToLongBits(adouble)转换为int,再使用==比较;

    7  对于数组域,调用Arrays.equals方法。

    例子:

        /****
         * 
         * 
         * java 八大基本数据类型
         */
        private int A_int;
        private short A_short;
        private char A_char;
        private byte A_byte;
        private double A_double;
        private float A_float;
        private boolean A_boolean;
        private long A_long;
        private Demo demo;//对象
        private int[] intArray;//数组域
        private Demo[] demos;//对象数组域
        
    
        @Override
        public boolean equals(Object obj) {
            if (!(obj instanceof MyDemo )){
                return false;
            }
            MyDemo demo=(MyDemo)obj;
            return demo.A_int==A_int&&
            demo.A_byte==A_byte&&
            demo.A_boolean ==A_boolean&&
            demo.A_short==A_short&&
            demo.A_char==A_char&&
            demo.A_long==A_long&&
            Float.floatToRawIntBits(demo.A_float)==Float.floatToRawIntBits(A_float)&&
            Double.doubleToRawLongBits(demo.A_double)==Double.doubleToRawLongBits(A_double)&&
            demo.demo.equals(demo)&&
            this.intsequals(demo.intArray)&&
            this.objArrayequals(demo.demos);
        }
        
        private boolean intsequals(int[] ints){
            return Arrays.equals(intArray, ints);
        }
        private boolean objArrayequals(Demo[] demos){
            return Arrays.equals(demos, demos);
        }
        
  • 相关阅读:
    jvm字节码简介
    Class类文件结构
    springboot 配置webservice接口
    jdk(1.8)命令行工具(二)
    springboot集成JsonRpc2.0
    jdk命令行工具(一)
    linux安装spark-2.3.0集群
    linux安装scala环境
    [机器学习实践] 针对Breast-Cancer数据集
    mac下 selenium + python 配置和入门
  • 原文地址:https://www.cnblogs.com/xiaoblog/p/4629901.html
Copyright © 2011-2022 走看看