java - java中字符串是如何传入方法的(就内存而言)

标签 java heap-memory stack-memory

当我们调用方法时,如果您传入原始类型,则在调用方法时该值将被放入堆栈帧中。如果您传入引用类型,如果它不为 null,则您可能已经在堆上的某个位置创建了它,并且放入堆栈的内容是对它的引用。

但是当我做类似的事情时,堆栈上会发生什么

person.setName("Jack");

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

最佳答案

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

但是,如果代码更改为:

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

然后传递的引用指向堆上的对象,就像任何引用类型一样。

关于java - java中字符串是如何传入方法的(就内存而言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558414/

相关文章:

memory - 为什么会有栈和堆?

Java Callable Pool 线程同时完成这一切

c++ - C/C++ 中的并发编程、堆栈和堆

java - 为什么 Java 的 InflaterInputStream(和其他类似类)只在其内部 Inflater 上有条件地调用结束

c++ - De-allcoating 动态分配的多维数组。

c - 堆栈和机器指令驻留在内存中的什么位置?

c - 字符串文字在内存中的什么位置?栈/堆?

原始类型的 java : Understanding Arrays. asList(T...array) 方法

java - SWT - 更改列宽而不更改表宽度

java - 在 Java 中使用 Swing 图标、编号的 .jpg 图像和 for 循环进行动画