当前位置: 首页 > 知识库问答 >
问题:

Java-我从equals方法得到错误的输出

傅树
2023-03-14

这里我试图测试我的对象是否等于!
关于这个数组,输出应该是:
true
False
False

但我得到了以下输出:
False
False
False

为什么第一个相等是假的?

//arrays
a = {1, 2, 3}
b = {1, 2, 3}  
c = {2, 3, 1} 

static void testEquals(Scanner scanner) {
    int[] a = readArray(scanner);
    int[] b = readArray(scanner);
    int[] c = readArray(scanner);
    IntegerArray ia = new IntegerArray(a);
    IntegerArray ib = new IntegerArray(b);
    IntegerArray ic = new IntegerArray(c);
    System.out.println(ia.equals(ib));
    System.out.println(ia.equals(ic));
    System.out.println(ib.equals(ic));
}

下面是IntegerArray类的实现:
*注意:该类必须是不可变的

final class IntegerArray {
private int[] a;

public IntegerArray(int arr[]) {
    a = new int[arr.length];
    for(int i = 0; i < a.length; i++)
    {
        a[i] = arr[i];
    }
}

public int length() {
    return a.length;
}

public int getElementAt(int i) {
    return a[i];
}

public int sum() {
    int sum = 0;
    for(int i = 0; i < a.length; i++)
    {
        sum += a[i];
    }
    return sum;
}

public double average() {
    return (double) this.sum() / this.length();
}

public IntegerArray getSorted() {
    int[] temp = Arrays.copyOf(a, a.length);
    Arrays.sort(temp);
    return new IntegerArray(temp) ;
}
}

共有1个答案

家志学
2023-03-14

假设您使用的是Xalan for Java的IntegerArray类,问题是该类没有为equals()hashcode()提供重写。这就是为什么使用默认的Object比较,比较对IntegerArray对象的引用。

不幸的是,您不能从Xalan的IntegerArray类派生,因为它是final。您可以编写自己的包装器,或者直接比较int[]数组,如本问答中所述。

 类似资料:
  • 我对使用此处描述的“舍入半偶数”对大十进制数进行舍入有问题。 我想四舍五入到小数点后两位: 输出: 23.87 但是数字是偶数,所以它应该是23.86还是不是?

  • 我正在制作一个基本计时器,这是我的第一个项目之一,当你按下一个按钮时,代码应该创建3个不同的变量,从它们各自的输入中获取值,这3个变量代表小时、分钟和秒。 发生的事情是,如果你安慰。记录由于某种原因未定义的这3个变量中的任何一个,如果没有这些值,整个倒计时将无法工作。 输入被设置为在html中的value=0开始,所以它应该至少返回0,而不是未定义 下面是javascript代码: 我看到了其他解

  • 问题:基于PersonDto中存在的规则值,我正在应用这些规则。在Rule1类中,我有一个修改id字段的逻辑。我正在设置新的id,我得到作为参数。 最后,我将结果存储到ArrayList中。 但是在ArrayList中,所有PersonDto的值都是我在应用规则时传递的最后一个id值。 例如: 正如您在上面的代码片段中所看到的,有两个ID10001和10002,但是当存储并打印结果时,所有元素中的

  • 我试图做一个java程序,但我有一个问题与输出。

  • 我试图在返回Object的方法中简单地从用户获得输入。由于某种原因,将引发此错误: 线程“main”java.lang.reflect.invocationTargetException在java.base/jdk.internal.reflect.nativeMethodAccessorImpl.invoke0(原生方法)在java.base/jdk.internal.reflect.nativ

  • 我正在处理一个电子邮件数据库程序,当我试图将电子邮件存储到数据库中时,我继续得到一个语法错误,我不确定为什么会发生这种情况。我以完全相同的方式存储用户对象,尽管它确实将用户对象存储到数据库中,但当我退出程序并再次测试程序时,它最终更新了数据库中的一些值,而不是插入新值。语法错误是否来自于我的一些列存储BLOB的事实? 大型机类