当我们调用方法时,如果传入基本类型,则在调用方法时将该值放在堆栈帧上。如果你传入一个引用类型,如果它不是null,你就已经在堆上创建了一些地方,并且放在堆栈上的内容是对它的引用。
但是当我做
这样的事情时,堆栈会发生什么person.setName("Jack");
它首先在堆上创建一个字符串对象,然后在堆栈上引用它吗?
答案 0 :(得分:3)
鉴于您的代码,"Jack"
是一个String 常量,因此它位于run-time constant pool中。该池驻留在JVM的一个区域中,称为方法区域。
但是,如果代码更改为:
Person.SetName(new String("Jack"));
然后传递的引用指向堆上的对象,就像通常用于任何引用类型一样。