大家好,我是鸭鸭!

此答案节选自鸭鸭最近弄的面试鸭神器「链接」,更多大厂常问面试题,可以点击进行阅读哈!

目前这个面试刷题神器刚出,有网页和小程序双端可以使用!

回归面试题!为什么 JDK9 把 中 char 数组改成了 byte 数组?

这个题目的答案其实非常简单:这个操作主要是为了节省内存空间,提高内存利用率。

在 JDK 9 之前, 类是基于 char[] 实现的,内部采用 UTF-16 编码,每个字符占用两个字节。

字符串数组如何转化为字符串_数组字符串转换_数组转字符串

但是,如果当前的字符仅需一个字节的空间,这就造成了浪费。例如一些 Latin-1 字符用一个字节即可表示。

因此 JDK 9 做了优化采用 byte 数组来实现:

字符串数组如何转化为字符串_数组字符串转换_数组转字符串

并引入了 coder 变量来标识编码方式(Latin-1 或 UTF-16)。对于大多数只包含 Latin-1 字符(即每个字符可以用一个字节表示)的字符串,内存使用量减半。

扩展

是国际标准编码 ISO-8859-1 的别名。 也是单字节编码,在 ASCII 编码的基础上,利用了 ASCII 未利用的最高位,扩充了 128 个字符,因此 可以表示 256 个字符,并向下兼容 ASCII。

收录的字符除 ASCII 收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚,没有被收录在 ISO-8859-1 当中,在后来的修订版 ISO-8859-15 加入了欧元符号。

的编码范围是 0x00-0xFF,ASCII的编码范围是 0x00-0x7F。

相对 ASCII 而言,较少被提及,其实 的使用还是比较广泛的,比如 MySQL(8.0之前)的数据表存储默认编码就是 。

最后

最后再推荐下鸭鸭目前努力在做面试刷题神器面试鸭「链接」,已经有 3000 多道面试题目啦,欢迎大家来阅读!如果大家有不会的面试题,也可以在面试鸭内反馈!鸭鸭会第一时间为大家解答!

我是鸭鸭,我们下期见~

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666

声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!