String的底层实现原理

2022-07-14  本文已影响0人  糯米团子123

先看jdk8源码:


jdk8 string源码.png

可以看出:

  1. String类由final修饰,不可以被继承

  2. 底层是由char数组实现的

  3. value用final修饰,不能修改value的引用地址(value不可变)

  4. private修饰和成员变量没有提供setter接口,保证了不可以通过外部接口来修改String的值

  5. 在JDK9中,将底层的char[]数组改为了byte[]数组存储。
    原因:char类型是2字节的,使用 char[] 来表示 String 就导致了即使 String 中的字符只用一个字节就能表示,也必须占用两个字节。但是在实际使用中,只用单字节字符的频率远高于双字节字符,节省字符串的占用空间
    仅仅将char[]数组存储修改为byte[]数组存储是远远不够的,jdk9中还配合了 Latin-1 的编码方式的编码方式( Latin-1:用单字节表示字符)。对于双字节字符使用UTF16的编码方式表示。因此在jdk9的String源码中引入了coder字段区分编码方式。

private final byte coder;

Java 会根据字符串的内容自动设置为相应的编码,要么 Latin-1 要么 UTF16。

上一篇 下一篇

猜你喜欢

热点阅读