On Java 7's equals() and deepEquals()

前端 未结 4 1198
我在风中等你
我在风中等你 2021-02-19 03:39

Method description says:

Returns true if the arguments are deeply equal to each other and false otherwise... Equality is determined by using the equ

相关标签:
4条回答
  • 2021-02-19 03:48

    If at least one of the arguments of deepEquals method is not an array, then Objects.deepEquals and Objects.equals are same.

    0 讨论(0)
  • 2021-02-19 03:49
    String[] firstArray  = {"a", "b", "c"};
    String[] secondArray = {"a", "b", "c"};
    
    System.out.println("Are they equal 1    ? " + firstArray.equals(secondArray) );
    System.out.println("Are they equal 2    ? " + Objects.equals(firstArray, secondArray) );
    
    System.out.println("Are they deepEqual 1? " + Arrays.deepEquals(firstArray, secondArray) );
    System.out.println("Are they deepEqual 2? " + Objects.deepEquals(firstArray, secondArray) );
    

    will return

    Are they equal 1    ? false
    Are they equal 2    ? false
    Are they deepEqual 1? true
    Are they deepEqual 2? true
    

    How come the "shallow" equals methods return false? This is because in Java, for arrays, equality is determined by object identity. In this example, firstArray and secondArray are distinct objects.

    Doing String[] secondArray = firstArray instead will therefore return true for all four tests.

    0 讨论(0)
  • 2021-02-19 03:49

    Attaching a very good example i found on javarevisited.blogspot.in

    public class ArrayCompareTest {
    
    public static void main(String args[]) {
    
       //comparing primitive int arrays in Java
        int[] i1 = new int[] {1,2,3,4};
        int[] i2 = new int[] {1,2,3,4};
        int[] i3 = new int[] {0,2,3,4};
    
        //Arrays.equals() compare Array and return true if both array are equal
        //i..e either both of them are null or they are identical in length, and each pair
        //match each other e.g. i[0]=i2[0], i[1]=i2[1] and so on
    
        //i1 and i2 should be equal as both contains same elements
        boolean result = Arrays.equals(i1, i2);
        System.out.println("Comparing int array i1: " + Arrays.toString(i1)
                            + " and i1: " + Arrays.toString(i2));
        System.out.println("Does array i1 and i2 are equal : " + result);
    
        //array ii2 and i3 are not equals as only length is same, first pair is not same
        result = Arrays.equals(i2, i3);
        System.out.println("Comparing int array i2: " + Arrays.toString(i2)
                            + " and i3: " + Arrays.toString(i3));
        System.out.println("Does array i2 and i3 are equal : " + result);
    
        //comparing floating point or double arrays in Java
        double[] d1 = new double[] {1.5, 2.4, 3.2, 4,1};
        double[] d2 = new double[] {1.5, 2.4, 3.2, 4,1};
        double[] d3 = new double[] {0.0, 2.4, 3.2, 4,1};
    
        //Comparing two floating-point arrays using Arrays.equals() in Java
    
        //double array d1 and d2 should be equal - length same, each index matches
        result = Arrays.equals(d1, d2);
        System.out.println("Comparing double array d1: " + Arrays.toString(d1)
                            + " and d2: " + Arrays.toString(d2));
        System.out.println("Does double array d1 and d2 are equal : " + result);
    
        //double array d2 and d3 is not equal - length same, first pair does not match
        result = Arrays.equals(d2, d3);
        System.out.println("Comparing double array d2: " + Arrays.toString(d2)
                            + " and d3: " + Arrays.toString(d3));
        System.out.println("Does double array d2 and d3 are same : " + result);
    
        //comparing Object array, here we will use String array
        String[] s1 = new String[]{"One", "Two", "Three"};
        String[] s2 = new String[]{"One", "Two", "Three"};
        String[] s3 = new String[]{"zero", "Two", "Three"};
    
        //String array s1 and s2 is equal - length same, each pair matches
        result = Arrays.equals(s1, s2);
        System.out.println("Comparing two String array s1: " + Arrays.toString(s1)
                            + " and s2: " + Arrays.toString(s2));
    
        System.out.println("Are both String array s1 and s2 are equal : " + result);
    
        //String array s2 and s3 is not equal - length same, first pair different
        result = Arrays.equals(d2, d3);
        System.out.println("Comparing two String array s2: " + Arrays.toString(s2)
                             + " and s3: " + Arrays.toString(s3));
    
        System.out.println("Are both String array s2 and s3 are equal : " + result);
    
        //Comparing nested arrays with equals and deepEquals method
        //Arrays.equals() method does not compare recursively,
        //while deepEquals() compare recursively
        //if any element inside Array is type of Array itself,
        //as here second element is String array
    
        Object[] o1 = new Object[]{"one", new String[]{"two"}};
        Object[] o2 = new Object[]{"one", new String[]{"two"}};
    
        System.out.println("Object array o1: " + Arrays.toString(o1) + " and o2: "
                            + Arrays.toString(o2));
        System.out.println("Comparing Object Array o1 and o2 with Arrays.equals : "
                            + Arrays.equals(o1, o2));
        System.out.println("Comparing Object Array o1 and o2 with Arrays.deepEquals : "
                            + Arrays.deepEquals(o1, o2));
    } 
    

    }

    Output: Comparing int array i1: [1, 2, 3, 4] and i1: [1, 2, 3, 4] Does array i1 and i2 are equal : true

    Comparing int array i2: [1, 2, 3, 4] and i3: [0, 2, 3, 4] Does array i2 and i3 are equal : false

    Comparing double array d1: [1.5, 2.4, 3.2, 4.0, 1.0] and d2: [1.5, 2.4, 3.2, 4.0, 1.0] Does double array d1 and d2 are equal : true

    Comparing double array d2: [1.5, 2.4, 3.2, 4.0, 1.0] and d3: [0.0, 2.4, 3.2, 4.0, 1.0] Does double array d2 and d3 are same : false

    Comparing two String array s1: [One, Two, Three] and s2: [One, Two, Three] Are both String array s1 and s2 are equal : true

    Comparing two String array s2: [One, Two, Three] and s3: [zero, Two, Three] Are both String array s2 and s3 are equal : false

    Object array o1: [one, [Ljava.lang.String;@19821f] and o2: [one, [Ljava.lang.String;@addbf1] Comparing Object Array o1 and o2 with Arrays.equals : false Comparing Object Array o1 and o2 with Arrays.deepEquals : true

    0 讨论(0)
  • 2021-02-19 03:54

    deepEquals() is used with nested arrays of arbitrary depth.
    equals() is used with simple primitive data types.
    For ex:

    public class TwoDArray {
        public static void main(String args[]) {
            int a[][] = new int[2][2];
            int b[][] = new int[2][2];
            for(int i=0;i<2;i++)
                for(int j=0;j<2;j++) {
                    a[i][j] = i+j;
                    b[i][j] = i+j;  
                }
            System.out.println(Arrays.deepEquals(a,b));//return true
            System.out.println(Arrays.equals(a, b));//return false
        }
    }
    
    0 讨论(0)
提交回复
热议问题