字符串,class,运行时常量池

字符串常量池

1.Java中两种创建字符串对象的方式的分析

直接用字面量的方式创建一个字符串(String a = "hello"),

这种方式创建的字符串是直接存在字符串常量池中,这种方式会先去字符串常量池中查看"hello"是否存在,

如果存在的话会先去直接返回hello的引用地址给a,

2.通过String的构造方法创建(String a = new String(“hello”))

首先会创建hello对象在堆中,然后在字符串常量池中创建一个对象,该对象指向于hello堆中hello对象,

2.字符串常量池存储的位置

在jdk1.6的时候,字符串常量池是存储在方法区的,然后在jdk1.7的时候,字符串常量池就改为在堆中,

class常量池

java类被编译后,就生成了.class文件,class文件中存在了类的信息,方法。接口。字段等描述,还有一项就是常量池,常量池中存的就是一些字面量(字符串,基本数据类型,final常量),以及符号引用(类路劲,方法和字段的描述符和名称),每一个class文件都有自己的class常量池,

运行时常量池

类加载通过类的全路径找到class文件,然后以二进制流的方式加载class文件,然后经过一系列的验证,连接,解析,初始化等操作解析class文件,在解析的时候class文件中的常量池就会被解析为运行时常量池,运行时常量池其实class常量池被类加载加载后的状态,class常量池中的符号引用,有一些会被解析为直接引用(就是直接引用于对象的位置)

运行时常量池和class常量池的区别就在于其动态性,class常量池又叫做静态常量池,池中的常量是预先设置好的,那么运行时常量池是可以后期动态的向常量池中添加常量,比如String.intern()就是典型的向运行时常量池中添加常量的方法

常量池的好处

1.节省内存空间,同样的字符串在常量中只有一份,并且只会分配一次内存空间

2.避免了频繁的创建和销毁常量对系统带的来性能影响,

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前段时间公司在赶一个任务,要给某客户做演示。也就是说要完成个demo。公司表示一定要及时完成。为此,周末还去加了班...
    xxwade阅读 694评论 0 2
  • 随着移动互联网时代的发展,涌现了一大批装行学习UI设计的童鞋,其中有做平面、电商、网页的设计师,纷纷转向UI设计学...
    UI设计教程阅读 1,750评论 0 1
  • 现在是凌晨一点半,就在刚过去的三个小时里,我穿着棉拖鞋跟战友小刘在院子里散步兜圈,走了足足有13公里。 这会儿我刚...
    阔月大江阅读 255评论 5 2
  • 昨天猫叔的分享课如期而至,相比阅读《有效学习》,猫叔的这五点分享与我而言更有意义。 一:养成碎片化学习习惯 1.随...
    希思诺阅读 234评论 0 0