gpt4 book ai didi

java - Arrays.deepEquals 给出了 int[] 的错误,但适用于 Integer[]

转载 作者:行者123 更新时间:2023-12-05 00:42:35 25 4
gpt4 key购买 nike

我在 eclipse Kepler 中使用以下程序

import java.util.Arrays;

public class Mainn {
public static void main(String[] args) {
int[] a = {1, 2};
int[] b = {1, 2};

System.out.println(Arrays.deepEquals(a, b));
}
}

它给我一个关于 int[] arguments not be applicable for Object[] formal parameters 的编译时错误。但是当我使用 Integer[] 而不是 int[] 作为数组 a 的数据类型时,同一个程序工作正常b.

我对此感到困惑。根据Java docs编译器自动在原语和包装类之间自动装箱和拆箱,所以它应该在这里工作。但它不起作用。为什么?

最佳答案

subtyping arrays 的规则如下,来自 Java Language Specification,其中 > 表示是父类(super class)型

If S and T are both reference types, then S[] > T[] iff S > T.

...

  • If P is a primitive type, then:
    • Object >1 P[]
    • Cloneable >1 P[]
    • java.io.Serializable >1 P[]

>1 表示是直接父类(super class)型

在这种情况下,SObjectTInteger,所以因为 IntegerObject 的子类型,因此 Integer[]Object[] 的子类型,您可以将它用作一个参数需要 Object[] 的方法。

然而,对于作为原始类型的 intObjectint[] 的父类(super class)型,因此 int[] 不能用于需要 Object[] 的地方。

包装类的概念在这里不适用。

关于java - Arrays.deepEquals 给出了 int[] 的错误,但适用于 Integer[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com