java 中的字符串如何传递到方法中(就内存而言)

How are strings passed into methods in java (In terms of memory)

当我们调用方法时,如果您传入原始类型,则该值会在调用方法时放在堆栈帧中。如果你传入一个引用类型,如果它不为空,你就已经在堆上的某个地方创建了它,放在堆栈上的是对它的引用。

但是当我做类似

的事情时,堆栈上会发生什么
person.setName("Jack");

它是否首先在堆上创建一个字符串对象,然后将对该对象的引用放在堆栈上?

根据您的代码,"Jack" 是一个字符串 常量 ,因此它位于 run-time constant pool 中。该池位于 JVM 的一个称为方法区的区域中。

但是,如果代码改为:

Person.SetName(new String("Jack"));

然后传递的引用指向堆上的一个对象,对于任何引用类型通常都是如此。