• 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);
        }
        
  • 相关阅读:
    U盘安装WIN10专业版
    jquery template模版引擎
    MySQL大数据量快速分页实现(转载)
    MySQL for Windows 解压缩版安装 和 多实例安装
    macbook 重装win7
    MySQL for Visual Studio Version
    VS2010中没有ado.net entity data model实体数据模型这一选项-解决办法
    修改server 2008远程桌面端口
    懒加载
    html-css 常用
  • 原文地址:https://www.cnblogs.com/xiaoblog/p/4629901.html
Copyright © 2020-2023  润新知