一个小疑点
一个小问题。Java codeAnimal annew Cat()annew Dog()Animal annew Cat() 在内存中开辟了一个栈。那么
一个小问题。
Java codeAnimal 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() 销毁~
指向问题应该没有重开 和覆盖