问题1
- 下述代码能否编译通过?为什么?
interface I{
}
public class Demo04 {
public static void main(String[] args) {
I[] i = new I[2];
}
}
- 可以编译通过,这就涉及到对Java中数组的认识了
- 首先
I[] i = new I[2];是在堆中生成了一个数组对象 - 但是这个数组中的元素存放的是给定数据类型对应的对象的地址,也就是说数组中存放的是引用!
- 初值都为null,暂时不指向任何地址,当然可以编译通过

问题2
- 下述代码可以编译通过吗?为什么?
interface I{
}
class C implements I{
}
public class Demo04 {
public static void main(String[] args) {
I[] i = new I[2];
i[0] = new C();
i[1] = new C();
}
}
-
可以编译通过
-
i[0] = new C();- 在堆中生成了一个对象
C,把C的地址赋值给i[0]

- 在堆中生成了一个对象
-
所以要知道
new出来的对象永远在堆里,数组中只存放对象的地址,而不存放对象本身
博客围绕Java代码编译问题展开,探讨两段代码能否编译通过及原因。指出涉及Java中数组的知识,数组在堆中生成对象,元素存放给定数据类型对应对象的地址,即引用,初值为null,对象在堆里,数组只存对象地址。
1420





