string字符串在jvm的存储
时间: 2023-12-31 15:03:40 浏览: 84
String在JVM中的存储方式是通过一个char数组来存储字符串的字符数据。在JDK8及以前的版本中,String内部定义了一个final char\[\] value来存储字符串数据。而在JDK9中,String的存储结构发生了变化,改为了使用byte\[\]来存储字符串数据。\[2\]
String对象在JVM中的存储位置有两种情况:
1. 字符串常量池:在JDK中,双引号括起来的字符串常量,例如"abc"、"def",都是直接存储在方法区的字符串常量池中。这是因为字符串在实际开发中使用非常频繁,为了提高执行效率,将字符串放在字符串常量池中。
2. 堆内存:使用new关键字创建的字符串对象会在堆内存中开辟空间。例如在示例代码中,使用new关键字创建的字符串对象"c",会在堆内存中开辟空间存储字符串数据。\[3\]
需要注意的是,字符串是不可变的,即一旦创建就不能修改。这是因为String类被声明为final,不可被继承,并且String对象在JVM中是不可变的。这意味着一旦字符串对象被创建,它的值就不能被改变。\[3\]
#### 引用[.reference_title]
- *1* [【Java】String字符串在JVM中的存储及其内存地址问题](https://blog.csdn.net/weixin_43390123/article/details/124376835)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [JVM上篇_13_StringTable_尚硅谷](https://blog.csdn.net/weixin_43811294/article/details/125462300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [Java基础String字符串存储原理](https://blog.csdn.net/qq_46096136/article/details/126533585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文