当我们调用方法时,如果您传入原始类型,则在调用方法时该值将被放入堆栈帧中。如果您传入引用类型,如果它不为 null,则您可能已经在堆上的某个位置创建了它,并且放入堆栈的内容是对它的引用。
但是当我做类似的事情时,堆栈上会发生什么
person.setName("Jack");
它是否首先在堆上创建一个字符串对象,然后将对该字符串的引用放在堆栈上?
最佳答案
根据您的代码,“Jack”
是一个字符串常量,因此它位于 run-time constant pool 中。该池驻留在 JVM 中称为方法区的区域中。
但是,如果代码更改为:
Person.SetName(new String("Jack"));
然后传递的引用指向堆上的对象,就像任何引用类型一样。
关于java - java中字符串是如何传入方法的(就内存而言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558414/