- 详细说明
从Java 9开始,Java中的String类的内部表示形式已更改为byte[] value,而不是char[] value。这个改变是作为Java Compact Strings增强的一部分引入的,旨在在特定情况下减少String对象的内存占用。
在之前的Java版本中,字符串中的每个字符都以2字节的Unicode值(UTF-16)存储。这种表示方式对于主要使用基本多语言平面(BMP)字符的语言效果良好,但对于包含超出BMP范围的字符的字符串来说效率低下。
通过在Java 9中引入byte[] value,String类现在使用了一种更紧凑的表示形式,称为Latin-1。在这种表示形式中,0到255范围内的字符(ASCII和ISO-8859-1)被存储为单个字节,而超出该范围的字符被存储为两个字节。
这个改变使得Java在处理主要由Latin-1字符组成的字符串时可以节省内存,而这在许多应用程序中经常出现。然而,需要注意的是,这种优化并不总是能够节省内存,特别是对于包含大量非Latin-1字符的字符串。 而且在很多字符串的相关操作中都需要做一下判断,判断用的是UTF-16还是Latin-1。 - 结论
总体而言,Java 9中String的内部表示形式的改变旨在提高内存效率,在特定情况下减少String对象的内存占用。
为什么从java9开始,String类底层从char[] value改成byte[] value?
于 2023-10-20 16:12:08 首次发布