在Java 7上的equals()和deepEquals()

Jam*_*sev 13 equality java-7 deepequals

方法描述说:

如果参数彼此非常相等则返回true,否则返回false ... 等于通过使用第一个参数的equals方法确定.

哪个(对我来说)表明,如果使用equals()方法,它们维护引用的每个对象也相等,则对象非常相等.他们所参考的每个物体也是平等的.并..

那么...... equality is determined by using the equals method of the first argument.

这有什么不同.equals()?假设我们恰当地描述了equals,对象等于另一个对象,对象的每个字段也等于它.

能否请您提供说明之间的差别的例子Objects.deepEquals()Objects.equals()

Abd*_*ull 15

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) );
Run Code Online (Sandbox Code Playgroud)

将返回

Are they equal 1    ? false
Are they equal 2    ? false
Are they deepEqual 1? true
Are they deepEqual 2? true
Run Code Online (Sandbox Code Playgroud)

为什么"浅层" equals方法会回归false?这是因为在Java中,对于数组,相等性由对象标识决定.在此示例中,firstArray并且secondArray是不同的对象.

否则String[] secondArray = firstArray因此而不是将返回true所有四个测试.


Pri*_*ley 7

如果自变量的至少一个deepEquals方法是不是一个数组,然后Objects.deepEqualsObjects.equals是相同的.