为什么从java9开始,String类底层从char[] value改成byte[] value?

  1. 详细说明
    从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。
  2. 结论
    总体而言,Java 9中String的内部表示形式的改变旨在提高内存效率,在特定情况下减少String对象的内存占用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值