字符串常量池中的StringTable是如何实现的?

2026-05-22 18:340阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计7946个文字,预计阅读时间需要32分钟。

一、String的基本特性String:字符串,使用一对双引号()引起来表示,如String s1=atguigu; String s2=new String(hello); // new 对象的方式 String被声明为final,不能被继承。

一、String的基本特性
  1. String:字符串,使用一对 “” 引起来表示

String s1 = "atguigu" ; // 字面量的定义方式 String s2 = new String("hello"); // new 对象的方式

  1. String被声明为final的,不可被继承
  2. String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小
  3. String在jdk8及以前内部定义了final char value[]用于存储字符串数据。JDK9时改为byte[]
二、为什么 JDK9 改变了 String 的结构

官方文档:openjdk.java.net/jeps/254

为什么改为 byte[] 存储?

  1. String类的当前实现将字符存储在char数组中,每个字符使用两个字节(16位)。
  2. 从许多不同的应用程序收集的数据表明,字符串是堆使用的主要组成部分,而且大多数字符串对象只包含拉丁字符(Latin-1)。这些字符只需要一个字节的存储空间,因此这些字符串对象的内部char数组中有一半的空间将不会使用,产生了大量浪费。
阅读全文

本文共计7946个文字,预计阅读时间需要32分钟。

一、String的基本特性String:字符串,使用一对双引号()引起来表示,如String s1=atguigu; String s2=new String(hello); // new 对象的方式 String被声明为final,不能被继承。

一、String的基本特性
  1. String:字符串,使用一对 “” 引起来表示

String s1 = "atguigu" ; // 字面量的定义方式 String s2 = new String("hello"); // new 对象的方式

  1. String被声明为final的,不可被继承
  2. String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小
  3. String在jdk8及以前内部定义了final char value[]用于存储字符串数据。JDK9时改为byte[]
二、为什么 JDK9 改变了 String 的结构

官方文档:openjdk.java.net/jeps/254

为什么改为 byte[] 存储?

  1. String类的当前实现将字符存储在char数组中,每个字符使用两个字节(16位)。
  2. 从许多不同的应用程序收集的数据表明,字符串是堆使用的主要组成部分,而且大多数字符串对象只包含拉丁字符(Latin-1)。这些字符只需要一个字节的存储空间,因此这些字符串对象的内部char数组中有一半的空间将不会使用,产生了大量浪费。
阅读全文