Jee*_*evi 20 java string jvm constants
我们来看下面的代码片段:
String s1 = "Hello";
String s2 = "Hello";
Run Code Online (Sandbox Code Playgroud)
由于实习,两个变量都引用同一个对象.由于字符串是不可变的,因此只创建一个对象并且它们都引用同一个对象.
A constant pool
也是一种东西,它包含在类中声明的所有常量(整数,字符串等).它是针对每个班级的.
System.out.println("Hello"); // I believe this Hello is different from above.
Run Code Online (Sandbox Code Playgroud)
问题:
string pool
在常量池中引用常量字符串对象的池?Mik*_*uel 15
我的问题是,
- 字符串池是指常量池中的常量字符串对象池吗?
没有.
"常量池"是指类文件中特殊格式的字节集合,对Java类加载器有意义.其中的"字符串"是序列化的,它们不是Java对象.还有很多种常量,而不仅仅是字符串.
请参见第4.4章常量池表
Java虚拟机指令不依赖于类,接口,类实例或数组的运行时布局.相反,指令指的是
constant_pool
表中的符号信息.
相反,"字符串池"在运行时使用(不仅仅在类加载期间),仅包含字符串,字符串池中的"字符串"是java对象."字符串池"是一个线程安全的弱映射,从java.lang.String
实例到java.lang.String
用于实习字符串的实例.
字符串文字是对类实例的引用
String
(§4.3.1,§4.3.3).而且,字符串文字总是指同一个类的实例
String
.这是因为字符串文字 - 或者更常见的是作为常量表达式(第15.28节)的值的字符串 - 被"实现"以便使用该方法共享唯一实例String.intern
.