java - string类型的局部变量存放在栈还是堆上?

标签 java

我在一个方法中有两个局部变量,如下所示,

int i=10;
String test="test";

据我所知,这些变量仅适用于特定方法,这些变量应该存储在堆栈中,字符串类型也会存储在堆栈中吗?

最佳答案

变量本身(对 String 实例的引用)将存储在堆栈中。

String 实例(包含 char[] 和实际数据)通常存储在堆中。不过,这要由 JVM 来优化。它可能是来自永久池的字符串,或者如果完成了逃逸分析(并且保证字符串不会离开本地范围),它也可能选择在堆栈上分配它。

所有对象和数组都是如此。只有基元不同(因为它们作为值传递,而不是作为对其他地方分配的数据结构的引用)。

关于java - string类型的局部变量存放在栈还是堆上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2099115/

相关文章:

java - 默认 Java keystore 包含哪些 key ?

java - 在java中解析QR返回的字符串

java - 集合的非泛型子类的构造函数

java - 使用 Volley、PHP 和 json 从 Android 中的 MySQL 服务器数据库检索单个数据

java - Jaudiotagger ID3 TAG for android - 可以设置插图但不能设置其他字段

java - 线程执行期间对象状态修改

java - 如果数组无限大,更改列值的最有效方法是什么,并查看一行是否具有所有相同的值?

java - Thread.sleep() 卡住包含 GraphStream 图形的 JFrame/GUI

java - 在 Java 的双向链表中将对象添加到另一个对象之前

java - 将 JFrame 添加到 JFrame,在再次使用第一个 JFrame 之前强制关闭新的 JFrame