黑马程序员技术交流社区
标题:
String引出的常量池概念
[打印本页]
作者:
hello_csu
时间:
2015-1-2 16:42
标题:
String引出的常量池概念
本帖最后由 hello_csu 于 2015-1-2 16:44 编辑
1, 常量池的概念
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。其中Byte, Short, Integer, Long, Character, Boolean,String都可以实现常量池。都数据存放于常量池的时候,其值存放一份拷贝。
2, JVM在常量池中查找数据
如String值存放于常量池中,那么先去查找,如果找到了,那么就不会添加同样的String。如果找不到话,才会去创建添加。
3, 什么样格式的数据存放于常量池,
例如
String s = "a" + "b" +"c";
String s1 = "abc";
s,s1都存放于常量池中,
从上面推理,其一般格式:Reference type=Const Value 这种形式的,其存放于常量池中,这有这样子才能够编译阶段就确定了该值变量。
4,String一些基本操作解析
sample1
: String s1 = "a" + "b"+ "c"; String s2= "abc";
s1==s2 ,因为实际上s1,s2都存放于常量池中,只保存一份备份。
sample 2:
String s1 = "a" + "b"+ "c"; String s2= "ab"; String s3 = s2 + "c";
s1 != s3为真的,因为s1放在常量池中,而s3不存放于常量池(编译期间不确定值,需要运行时候动态分配空间),所以地址不一样。
sample 3
: String s1 = "a" + "b"+ "c"; final String s2= "ab"; String s3 = s2 + "c";
s1 == s3,因为s2有final修饰,那么编译器阶段其就会被替换为"ab",所以s3存放于常量池中,因此其地址一样。
作者:
kerner
时间:
2015-1-2 17:30
关于常量池总结的很好,理解的很深刻,楼主肯定搞过底层的东西,好贴不得不顶。
作者:
刘挺
时间:
2015-1-2 18:36
好厉害,学习了,黑马怎么收藏帖子,知道吗
作者:
红楼
时间:
2015-1-2 21:53
好详细 ,,,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2