您的位置 首页 java

java 9 String底层结构的变化

String底层变化的动机是什么

string类的当前实现将字符存储在char数组中,每个字符使用两个字节(16位)。从许多不同的应用程序收集的数据表明,字符串是堆使用的主要组成部分,而且,大多数字符串对象只包含拉丁-1字符。这 样的字符只需要一个字节的存储空间,因此这样的字符串对象的内部字符数组中的一半空间将被闲置。

小结

  1. String底层变化的动机是什么 节省内存空间。
  2. 具体的变化有什么 Stirng类内部维护一个字符数组变化为维护一个字节数组。

StringBuffer与StringBuilder底层变化

由于String类底层已经发生变化,所以StringBuilder与StringBuffer底层也相应的发生了改变。

字符串的存储结构

Jvm 有专门的字符串常量池用于存放字符串,存放字符串的数据结构是HashTable。

HashTable的数据结构如下:

案例:

 public class StringDemo {
    public static void main(String[] args) {
        String a = "11";
        String b = new String("11");

        System.out.println("a的HashCode:"+a.hashCode());
        System.out.println("b的HashCode:"+b.hashCode());

        System.out.println("a==b :"+(a==b));   // 比较的指针地址
        System.out.println("a.equals(b) :"+ a.equals(b));   // 比较的是hashCode
    }
}  

运行结果:

说明创建了两个Oop

char[] 对应 TypeArrayKlass

String 对应 TypeArrayOopDesc

画图说明字符串在Jvm 中的存在形式:

文章来源:智云一二三科技

文章标题:java 9 String底层结构的变化

文章地址:https://www.zhihuclub.com/174376.shtml

关于作者: 智云科技

热门文章

网站地图