博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于常量池
阅读量:6840 次
发布时间:2019-06-26

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

常量池:

常量池分为静态常量池和运行时常量池。

所谓静态常量池是*.class文件中的常量池,*.class文件中的常量池不止包含字符串还包含属性和类的信息,这种常量池主要用于存放两类常量:字面量和符号引用量,字面量相当于JAVA语言层面常量的概念,如文本字符串,声明为final的常量,符号引用则属于编译原理方面的概念。

运行时常量池指的是JVM再装载完类后,将class文件中的常量池加载到内存中,并保存在方法区,我们经常说的常量池就保存在方法区中的运行时常量池。

运行时常量池相比于class文件中的常量池多一个动态性的优点,JAVA不要求常量只有在编译期才能产生,并不是说常量只有预置在class文件中才可以进入运行时常量池,在运行时也可以进入。这一特性被利用较多的就是String.intern(),这个方法就是寻找常量池中是否有equal相等的值,如果有则返回引用,如果没有那么就添加自己的值进入常量池。

常量池的好处

常量池实现了数据的共享,避免了重复数据的创建和销毁,进而提高了程序的性能。

节省空间:多个内容相同的字符串只占用一个内存

节省时间:==比equals速度快,两个引用量比较的时候可以直接比较引用量,效率更高。

public class TestString {    public static void main(String[] args) {        String s1="hel";        String s2="lo";        String s3=s1+s2;        String s4="hello";        System.out.println(s4==s3);//false        System.out.println(s4==(s1+s2));//false    }    }

在拼接s3的时候由于s1、s2是两个变量,所以不可预料,并不能在编译期确定,在运行期确定后在堆中的地址仍然不能确定,所以不可能与s4相等。

posted on
2019-04-09 21:32 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/tutuhome/p/10679921.html

你可能感兴趣的文章
HDU 2802 找单词
查看>>
Wordpress XML-RPC协议说明
查看>>
比如取得一个div得innerHTML
查看>>
网站DIV+css弹性+固宽布局案例
查看>>
开发者需知:优秀程序设计的18大原则
查看>>
半天打造小型万能OA办公系统, 靠的就是万能表单提交 + 轻量级工作流审批组件...
查看>>
Win7修改文件后缀名
查看>>
谈谈J2EE框架Paoding-Rose
查看>>
为程序员量身定制的12个目标
查看>>
DIV外区域Click后关闭DIV
查看>>
后缀数组学习笔记——罗穗骞倍增算法代码
查看>>
Automating Capistrano Password Prompts with Expect
查看>>
用 HTML5 和 Javascript 仿制一个水果忍者网页版! (直接浏览器在线玩+源代码下载)...
查看>>
设计模式简介
查看>>
删除数组中某一匹配项
查看>>
Sharepoint学习笔记—error处理-- The user does not exist or is not unique.
查看>>
CSS占位隐藏(转)
查看>>
利用jsdoc-toolkit生成javascript文档
查看>>
javascript 判断浏览器客户端
查看>>
NSString 中包含中文字符时转换为NSURL
查看>>