本文是 JDK1.8 String常量池详解,带图哦
jdk 1.8
先抛结论
1.只在常量池上创建常量
2.只在堆上创建对象
3.在堆上创建对象,在常量池上创建常量
4.在堆上创建对象,在常量池上创建引用
注意:
-
常量池有两种情况:引用(指针) 或 常量。如果该位置已经是引用或常量了,之后的操作都不会改变里面的情况!!!
-
调用
intern()
(jdk1.8): 如果常量池里是空的,就创建引用(指向堆,参考结论4);非空,不操作。返回值都是常量池里的内容。 -
堆中可以有任意个相同的字符串,常量池只能有一个(引用 或 常量)。
-
" " 和intern() 其实很像。区别就是在常量池为空时,“ ”是把值加进去,intern()是把引用加进去。
根据结论解决例子
例一
String s1 = new String("zxy"); // 结论3 |
例二
String s1 = "zxy"; // 加到常量池 |