File tree Expand file tree Collapse file tree 1 file changed +8
-8
lines changed
Expand file tree Collapse file tree 1 file changed +8
-8
lines changed Original file line number Diff line number Diff line change @@ -694,12 +694,12 @@ System.out.println(s);
694694** 字符串常量池** 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。
695695
696696```java
697- // 在堆中创建字符串对象 ”ab“
698- // 将字符串对象”ab“的引用保存在字符串常量池中
697+ // 在字符串常量池中创建字符串对象 ”ab“
698+ // 将字符串对象 ”ab“ 的引用返回给引用 aa
699699String aa = " ab" ;
700- // 直接返回字符串常量池中字符串对象”ab“的引用
700+ // 直接返回字符串常量池中字符串对象 ”ab“,赋值给引用 bb
701701String bb = " ab" ;
702- System . out. println(aa== bb);// true
702+ System . out. println(aa== bb); // true
703703```
704704
705705更多关于字符串常量池的介绍可以看一下 [Java 内存区域详解](https: // javaguide.cn/java/jvm/memory-area.html) 这篇文章。
@@ -708,7 +708,7 @@ System.out.println(aa==bb);// true
708708
709709会创建 1 或 2 个字符串对象。
710710
711- 1 、如果字符串常量池中不存在字符串对象“abc”的引用,那么它会在堆上创建两个字符串对象,其中一个字符串对象的引用会被保存在字符串常量池中。
711+ 1 、如果字符串常量池中不存在字符串对象 “abc”,那么它首先会在字符串常量池中创建字符串对象 " abc " ,然后在堆内存中再创建其中一个字符串对象 " abc "
712712
713713示例代码(JDK 1.8 ):
714714
@@ -720,14 +720,14 @@ String s1 = new String("abc");
720720
721721! [](https: // oss.javaguide.cn/github/javaguide/open-source-project/image-20220413175809959.png)
722722
723- `ldc` 命令用于判断字符串常量池中是否保存了对应的字符串对象的引用,如果保存了的话直接返回, 如果没有保存的话,会在堆中创建对应的字符串对象并将该字符串对象的引用保存到字符串常量池中 。
723+ `ldc (load constant)` 指令的作用是从常量池中加载常量,包括字符串常量、整数常量、浮点数常量、或者类引用。这里用于判断字符串常量池中是否保存了对应的字符串对象,如果保存了的话会将它的引用加载到操作数栈, 如果没有保存的话,会在字符串常量池中创建对应的字符串对象,并将其引用加载到操作数栈中 。
724724
725- 2 、如果字符串常量池中已存在字符串对象“abc”的引用 ,则只会在堆中创建 1 个字符串对象“abc”。
725+ 2 、如果字符串常量池中已存在字符串对象“abc”,则只会在堆中创建 1 个字符串对象“abc”。
726726
727727示例代码(JDK 1.8 ):
728728
729729```java
730- // 字符串常量池中已存在字符串对象“abc”的引用
730+ // 字符串常量池中已存在字符串对象“abc”
731731String s1 = " abc" ;
732732// 下面这段代码只会在堆中创建 1 个字符串对象“abc”
733733String s2 = new String (" abc" );
You can’t perform that action at this time.
0 commit comments