1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Update memory-area.md

This commit is contained in:
guide 2022-01-19 10:27:41 +08:00
parent 4369267357
commit 364a51befc

View File

@ -438,7 +438,7 @@ String str3 = new String("abcd");
**字符串常量池比较特殊,它的主要使用方法有两种:**
1. 直接使用双引号声明出来的 `String` 对象会直接存储在常量池中。
2. 如果不是用双引号声明的 `String` 对象,使用 `String` 提供的 `intern()` 方法也有同样的效果。`String.intern()` 是一个 Native 方法,它的作用是:如果运行时常量池中已经包含一个等于此 String 对象内容的字符串则返回常量池中该字符串的引用如果没有JDK1.7 之前(不包含 1.7)的处理方式是在常量池中创建与此 `String` 内容相同的字符串并返回常量池中创建的字符串的引用JDK1.7 以及之后字符串常量池被从方法区拿到了堆中jvm 不会在常量池中创建该对象,而是将堆中这个对象的引用直接放到常量池中,减少不必要的内存开销。
2. 如果不是用双引号声明的 `String` 对象,使用 `String` 提供的 `intern()` 方法也有同样的效果。`String.intern()` 是一个 Native 方法,它的作用是:如果字符串常量池中已经包含一个等于此 String 对象内容的字符串则返回常量池中该字符串的引用如果没有JDK1.7 之前(不包含 1.7)的处理方式是在常量池中创建与此 `String` 内容相同的字符串并返回常量池中创建的字符串的引用JDK1.7 以及之后字符串常量池被从方法区拿到了堆中jvm 不会在常量池中创建该对象,而是将堆中这个对象的引用直接放到常量池中,减少不必要的内存开销。
示例代码如下JDK 1.8 :