大厂Java面试题详解,很多人答不上来,附答案解析!

为什么JDK9要将String的底层实现由char[]改成byte[]?这个问题比较冷门,不过有个粉丝正好不幸被命中,错失了一次好的机会。

 

hello,大家好,我是好程序员小源,今天给大家分享一下这个面试题的回答思路。另外有想要大厂面试题大全的同学可以在后台dd面试题领取!今天这个问题是值得大家去学习和研究,面试官通过这个问题想考察求职者对于JDK版本更新、性能和内存优化方面的了解,对字符编码的认知,以及对代码兼容性的考虑,这可以评估求职者在Java技术和性能优化方面的知识和经验。

好程序员先说一下结论,JDK9并没有将string的底层实现由char[]改成byte[],而是在JDK9中引入了一个compact的strings的一个优化,这个优化的目的是减少string对象的内存消耗。

在JDK中,字符串在Java的string类的内部,是有一个包含该字符串中所有字符的char[]来表示。同时JDK内部使用UTF-16的编码方式,意味着每个字符char由两个字节来组成。如果一个字符串只包含英文字符或者一个ASCII字符,那么我们只需要一个字节就能表示所有ASCII字符的一个场景,这就意味着字符串实际存储的空间要比需要存储空间多了一倍。

为了解决这个问题,JDK9引入了compact string的优化,这个优化将string对象的字符串数组char[]改成了byte[],只有在需要存储非ASCII字符的时候才会使用char[]。对于纯ASCII字符串,它的字节表示可以直接存储在byte[]中,从而去节省了一半的内存空件。这个优化是在编译器和运行时环境层面来实现的,对于开发者来说是透明的,不需要去修改现有的任何代码,我们只需要通过这样一个虚拟机参数来控制是否进行优化就好啦~

今天好程序员的分享就到这里结束了,感谢大家的关注和点赞,还有不懂的可以dd~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值