字符串常量池中的StringTable是如何实现的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计7946个文字,预计阅读时间需要32分钟。
一、String的基本特性String:字符串,使用一对双引号()引起来表示,如String s1=atguigu; String s2=new String(hello); // new 对象的方式 String被声明为final,不能被继承。
一、String的基本特性- String:字符串,使用一对 “” 引起来表示
String s1 = "atguigu" ; // 字面量的定义方式
String s2 = new String("hello"); // new 对象的方式
- String被声明为final的,不可被继承
- String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小
- String在jdk8及以前内部定义了
final char value[]用于存储字符串数据。JDK9时改为byte[]
官方文档:openjdk.java.net/jeps/254
为什么改为 byte[] 存储?
- String类的当前实现将字符存储在char数组中,每个字符使用两个字节(16位)。
- 从许多不同的应用程序收集的数据表明,字符串是堆使用的主要组成部分,而且大多数字符串对象只包含拉丁字符(Latin-1)。这些字符只需要一个字节的存储空间,因此这些字符串对象的内部char数组中有一半的空间将不会使用,产生了大量浪费。
本文共计7946个文字,预计阅读时间需要32分钟。
一、String的基本特性String:字符串,使用一对双引号()引起来表示,如String s1=atguigu; String s2=new String(hello); // new 对象的方式 String被声明为final,不能被继承。
一、String的基本特性- String:字符串,使用一对 “” 引起来表示
String s1 = "atguigu" ; // 字面量的定义方式
String s2 = new String("hello"); // new 对象的方式
- String被声明为final的,不可被继承
- String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小
- String在jdk8及以前内部定义了
final char value[]用于存储字符串数据。JDK9时改为byte[]
官方文档:openjdk.java.net/jeps/254
为什么改为 byte[] 存储?
- String类的当前实现将字符存储在char数组中,每个字符使用两个字节(16位)。
- 从许多不同的应用程序收集的数据表明,字符串是堆使用的主要组成部分,而且大多数字符串对象只包含拉丁字符(Latin-1)。这些字符只需要一个字节的存储空间,因此这些字符串对象的内部char数组中有一半的空间将不会使用,产生了大量浪费。

