1

这是我在 geeks for geeks 上找到的代码 我对类 Object 和什么是深度比较感到困惑 我对 Java 还是很陌生,我正在尝试尽可能深入地了解事物。请不要被我愚蠢的怀疑激怒

import java.util.Arrays;
class Test 
{ 
    public static void main (String[] args)  
    { 
        // inarr1 and inarr2 have same values 
        int inarr1[] = {1, 2, 3}; 
        int inarr2[] = {1, 2, 3};    
        Object[] arr1 = {inarr1};  // arr1 contains only one element 
        Object[] arr2 = {inarr2};  // arr2 also contains only one element 
        if (Arrays.equals(arr1, arr2)) 
            System.out.println("Same"); 
        else
            System.out.println("Not same"); 
    } 
} 
4

3 回答 3

3

如果添加 Arrays.deepEquals 比较,则比较结果

    if (Arrays.equals(arr1, arr2)) 
        System.out.println("Same"); 
    else
        System.out.println("Not same"); 
    if (Arrays.deepEquals(arr1, arr2)) 
        System.out.println("Same"); 
    else
        System.out.println("Not same"); 

在第二种情况下,它应该是“相同的”。这是因为虽然 Object[] 和 int[] 本身是不同的对象,但它们的 int 内容是相同的

于 2020-09-02T18:13:19.070 回答
1

Arrays.equal()适用于比较一维数组。它将遍历每个值并检查它们是否相等。如果我们在多维数组上使用这个方法,它就会失败。

Arrays.deepEquals()允许我们通过比较每一对(在二维数组情况下)来检查多维数组是否相等,以查看它们是否相等。当您进行此分配Object[] arr1 = {inarr1};时,您正在制作一个数组的数组,因为inarr1它是一个int数组。

对于第二个问题,对象类是Java中所有类的父类,描述了Java中类应该包含/遵循的常见方法/行为。换句话说,所有类都必须并且确实从 Object 类扩展而来。它在大多数 IDE 中都隐含。

因此,创建 Object 类的对象就是简单地创建 Object 类型的对象。您可以实例化到任何具体的子类。因此,它相当不具描述性,很少使用。我个人只看到有人在覆盖比较器的比较方法时这样做。

于 2020-09-02T18:30:41.987 回答
1

Object是 a class,就像任何 other 一样class,但不同的是 eachclass是它的后代。这意味着您可以将任何对象转换为Object. 这就是对象的Object意思。

至于深度比较:

java中有两种类型的对象比较——浅的和深的。

当您使用 '==' 运算符时,您正在比较引用是否相等。这意味着您正在比较对象的内存地址。它被称为浅比较。

当您使用 .equals() 时,您正在比较对象值本身是否相等。这意味着您正在检查“两个对象是否对相应的实例变量具有相同的值”。

来源:https ://blog.webnersolutions.com/java-shallow-and-deep-comparison-of-objects/

于 2020-09-02T18:31:04.920 回答