首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

一个小疑点

2012-02-26 
一个小问题。Java codeAnimal annew Cat()annew Dog()Animal annew Cat() 在内存中开辟了一个栈。那么

一个小问题。

Java code
Animal an=new Cat();an=new Dog();



Animal an=new Cat(); 在内存中开辟了一个栈。
那么 an=new Dog(); 是重新开的,还是覆盖的?

[解决办法]
new Cat()会在堆中开辟一片内存,而栈中只是存放堆中的地址
new Dog()会在堆中再开辟一片内存,而栈中存放的地址会改变为后者
[解决办法]
[color=#FF0000]
[解决办法]
你本来的说法也不够确切,new Cat()是在堆内存开辟了一个 对象,然后 对象引用an有可能在堆栈当中,看an是不是局部变量了,an引用指向到刚刚开辟的对象
new Dog()也是在内存JVM堆当中开辟了一个新对象,然后an的引用指向新开辟对象
an=new Dog() 是重开了一个新对象,肯定不是覆盖,原来的new Cat()的对象 因为没有程序引用到,所以会被JVM的垃圾回收机制自动回收
[解决办法]
Animal an=new Cat(); an 指向 NEW CAT()对象
an=new Dog(); an 指向 NEW DOG()对象;NEW CAT() 销毁~
指向问题应该没有重开 和覆盖
 




热点排行