数组大小在java中无关紧要吗?

时间:2014-09-29 01:06:04

标签: java arrays

根据以下声明,

  

可以将子类数组分配给其超类的数组。可以将实现类的数组分配给其接口类型的数组。尺寸无关紧要。

我在下面写了示例代码来检查数组

中大小的行为
interface I{}
class C implements I{}

/* dummy.java*/
public class dummy{
    public static void main(String[] args){
        C[] c = new C[6];
        I[] i = new I[2];
        c[0] = new C();
        c[1] = new C();
        c[2] = new C();
        c[3] = new C();
        c[4] = new C();
        c[5] = new C();
        i = c;
        System.out.println(i[5].getClass());
    }
}

当我说new C[6];时,会创建一个[null,null,null,null,null,null]类型的对象class [LC,并且c指向此对象。当我说new I[2];时,会创建一个[null,null]类型的对象class [LI,并且i指向此对象。

我的问题:

尽管在定义i[5]后创建了一个对象[null, null],但当我说new I[2]时,接口数组如何在这里工作?当我说i = c;时到底发生了什么?接口new I[2];期间是否修改了接口i = c;数组的大小?

2 个答案:

答案 0 :(得分:4)

该引用试图说的是数组的大小是对象的一部分,即。它不是引用或变量类型的一部分。

i = c;

您要将c中保留的参考值的副本分配给i。也就是说,i会将同一个实例引用为c

  

接口新阵列I的大小[2];在分配期间进行修改i = c;?

不,这就是重点。 ic只是变量。变量赋值没有副作用。

答案 1 :(得分:0)

当你设置 i=c

您正在设置i指向由c创建的对象。因此,i现在将指向C[6];<这个数组

所以... i[1] = new I(); c[1]将返回I object