歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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);
    }

Copyright © Linux教程網 All Rights Reserved