【问题标题】:How to create an equals method that compares two object arrays of a class?如何创建一个比较一个类的两个对象数组的equals方法?
【发布时间】:2013-09-06 06:09:20
【问题描述】:

我正在尝试创建一个比较两个对象的 equals 方法。问题是,我对这些东西有点陌生,所以我会尽量简单地解释我的目标。

public class A {
...
}

public class B {
private A[] arr = new A[10];

public boolean equals(A[] temp) {
//compare
}
}

假设上面的代码是我所拥有的总结。现在,假设我有:arr.equals(Obj) Obj 是另一个 A[] 对象。现在在我的 equals 语句中,我想引用原始的 arr 数组,我该怎么做呢?

例如,假设我想比较 arr 的长度和 temp 的长度(又名 Obj 的长度),我该怎么做?我知道它会类似于 (temp.length == arr.length) 但是当我通过 arr.equals(obj) 传递 arr 时如何访问它?

编辑:为了澄清,假设对象不是简单的数组。例如,A 类可能有一个名称、一个类型(两个字符串)和一个数量(一个 int),所以我不能像两个普通数组一样简单地比较它们。

谢谢!

【问题讨论】:

标签: java arrays class object boolean


【解决方案1】:

您可以使用 java.util.Arrays.equals(Object[] a, Object[] a2) 来测试两个指定的 Object 数组是否彼此相等

【讨论】:

    【解决方案2】:

    使用关键字this,它始终代表您正在应用该方法的对象(紧接在点之前)。例如:

        public boolean equals(A[] temp) {
            return this.length == temp.length ;
        }
    

    现在,在您的代码的特定情况下,您没有将方法equals 定义为类A 的一部分,而是定义为实例包含arr 的类B。那么,解决方案是:

        public boolean equals(A[] temp) {
            return this.arr.length == temp.length ;
        }
    

    【讨论】:

    • 这是我最初的想法,我有 if (this.length == temp.length),但 Eclipse 告诉我“长度无法解析或不是字段”。对于这个长度。这正常吗?我仍然可以编译。
    • this.length 未在 B 中定义,在 B 中您已定义 arr,如果您再次阅读 Mario Rossi 的回答,arr 有一个长度,您会发现 this.length 是表示问题,然后他为你展示了一个特定的案例。
    【解决方案3】:

    在你的 class A 中写一个等于 mwthod

    public class A {
    ...
    //Override equals method.
    
    }
    

    现在,如果您想比较 class A 的 2 个数组,您可以简单地使用 java.utils.Arrays.equals(A a1[], A a2[]);

    你必须重写 class A 中的 equals 方法,因为 java.utils.Arrays.equals 内部使用了 A 类的 equals。

    这是一个example,通过它。

    【讨论】:

      猜你喜欢
      • 2013-12-10
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 2011-04-26
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多