Java内存管理,求教大神!

class Xoo{
int x;
}

class Yoo extends Xoo{
int y;
}

main方法中运行以下代码:

Xoo[ ] arr =new Yoo();

请问以上代码,在内存中是否为:
1.在栈中创建Xoo[ ]数组类型的引用变量
2.在堆中创建引用类型数组对象,共四个元素,每个元素为Xoo类型的引用,初始值为null(我原本以为数组每个元素应为Yoo类型的引用,但经过验证使用arr[0]只能调用Xoo类的方法而不能调用Yoo类的方法,不过这样new Yoo()就显得毫无意义了)

求大神指教,我的推测是否正确,如果错误,以上代码在内存中是如何运行的?谢谢!

4个回答

不好意思,上面代码写错了,应该是

Xoo[ ] arr = new Yoo[4];

不好意思!

Xoo[ ] arr = new Yoo[4];
这个代码应该不能编译。Java不支持数组的协变。

在栈中创建Xoo[ ]数组类型的引用变量
在堆中创建引用类型数组对象,共四个元素,每个元素为Xoo类型的引用,初始值为null(我原本以为数组每个元素应为Yoo类型的引用
这两句是对的。

qq_35337922
qq_35337922 多谢大大指导!这种语法叫做数组的协变吗? 不过我在eclipse上试了下,这行代码是可以编译并且运行的
3 年多之前 回复

http://blog.csdn.net/java_0_day/article/details/51519012
你看一下我这篇博客,希望对你有帮助

qq_35337922
qq_35337922 多谢大大~
3 年多之前 回复

仔细阅读深入java虚拟机第二章

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问