博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正确认识String池
阅读量:6226 次
发布时间:2019-06-21

本文共 756 字,大约阅读时间需要 2 分钟。

String Pool是运行时常量池中虚拟出来的一个概念。

举个例子:

String str0 = "abc";

String str1 = new String("abc");

 

    当执行String str0 =”abc”;时,JVM会在栈中创建三个char型的值 ’a’ , ’b’ 和 ’c’ ,然后在堆中创建一个String对象,它的值(value)是刚才在栈中创建的三个char型值组成的数组{ ’a’ , ’b’ , ’c’ },最后这个新创建的String对象的值”abc”会被添加到运行时常量池中。注意,在编译期就已经确定将该对象存储到String Pool中了。

    如果我们接着执行String str1=new String(”abc”);代码,由于”abc”已经被创建并保存于常量池中,因此JVM只会在堆中新创建一个String对象,但是它的值(value)是共享前一行代码执行时在常量池中的 ” abc ” 。注意,编译期在String Pool中创建一个,运行时Heap中创建一个。

    运行是常量池是方法区的一部分,相对于Class文件常量池的另外一个重要特性是具备动态性,Java语言并不要求常量一定只有编译器才能产生,运行期间也可能将新的常量放入池中,这种特性被开发人员利用得比较多的便是String类的intern()方法。

 

 String he = "he";

 String hello = he + "llo"; // hello=="hello" false,档he修饰为final时,为true,原因是编译器优化

 he==he.intern true

 

定义很长的字符串或字符串数组,会否发生栈溢出

原文链接:[http://wely.iteye.com/blog/2359838]

转载地址:http://wafna.baihongyu.com/

你可能感兴趣的文章
Easy ui Datagrid(下拉、复选、只输入数字、文本) 追加、删除、更改
查看>>
20145209刘一阳 《网络对抗》逆向及BOF基础实践
查看>>
Groovy's dynamic mixin
查看>>
2018.10.27-dtoj-3996-Lesson5!(johnny)
查看>>
LCLFramework框架之数据门户
查看>>
python基础-----集合(在我的世界你是唯一)
查看>>
【转】Closeable, Readable, Flushable, Appendable
查看>>
css
查看>>
Java 语言中 Enum 类型的使用介绍
查看>>
Git and Subversion
查看>>
用Node+wechaty写一个爬虫脚本每天定时给女(男)朋友发微信暖心话
查看>>
opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整...
查看>>
名校推荐20本英文经典书(留着)
查看>>
反射机制(Java)
查看>>
【leetcode】Permutations
查看>>
全世界最详细的一步一步搭建RAC步骤(二)---配置ASM+裸设备【weber出品】
查看>>
LeetCode算法题-Longest Uncommon Subsequence I(Java实现)
查看>>
译文:《Grouped》各章小结
查看>>
数据库设计心得
查看>>
【洛谷 P4342】[IOI1998]Polygon(DP)
查看>>