如:
class A{}
public class B{
public static void main(String[] args){
new A(); //这个在栈里事实上有引用产生吗?
}
}
class A{}
public class B{
public static void main(String[] args){
new A(); //这个在栈里事实上有引用产生吗?
}
}
public void f(){}
}
new A().f();
调用这个方法怎么进行呢?我认为是有引用的。
要不然如何找到它的众多方法中的一个。
只是这个引用等一调用结束,马上消失了,是吧??
如:
class A{}
public class B{
public static void main(String[] args){
new A(); //这个在栈里事实上有引用产生吗?
}
}
答:main()中的new A();在栈里事实上有引用产生.
new A();这个语句虽然说不返回什么,但new其实还是返回了对象的地址,如果有 A a = new A(),则这个地址就被保存在stack里a那,但是就这个语句来说在stack里是没有创建引用的,只不过地址没传递出去而是直接就用这个地址来指向对象从而来调用方法,就类似于a.f
在栈里当然创建了A的引用.new A()这句本身就是先将对象A的new出来的引用入栈,然后再调用A的构造器进行初始化,然后再用栈中的已经初始化过对象空间的这个引用来调用方法f().整个这一个过程中,A对象的引用一直在栈中.