【发布时间】:2018-10-02 07:34:46
【问题描述】:
在下面的代码中,EX1 和 EX 2 证明了同质理论,但在 EX3 中它包含多个类型值。那么,我们怎么能说数组是齐次的呢?这背后的确切理论是什么?
public class Test {
public static void main(String[] args) {
// Ex 1
int [] intArr = new int[5];
intArr[0] = 1;
intArr[1] = 2;
// Ex 2
int [] intArr2 = new int[5];
intArr2[0] = 1;
intArr2[1] = "ss";
// Ex 3
Object [] objArr = new Object[5];
objArr[0] = 1;
objArr[1] = "ss";
objArr[3] = new Object();
}
}
【问题讨论】:
-
您将 EX3 声明为对象数组,并且 java 的语法糖允许您不明确将 1 和“ss”声明为
Object(就像自动装箱和拆箱与Integer <-> int一起使用)。但是当它们被添加到数组中时,它们会被转换为Object,因此数组保持同质。它仅包含Object类型的值 -
You can't assign a String to an int array。你在发布之前测试过你的代码吗?
-
@TimBiegeleisen 我认为这是 OP 的一部分,指出数组是同质的,OP 应该将 Ex 2 标记为导致编译错误。
-
@xtratic 是的,看到 Random Guy 的评论后,我明白了这个问题。
-
@Sandun Perera 在 Ex 3 中,
objArr[0]包含一个Integer,它是一个Object,与int相框;objArr[1]包含一个String,它是一个Object;并且objArr[3]包含一个Object,这显然是一个Object。所以你有一个充满Objects的数组。
标签: java arrays data-structures collections