Java中字符串为了解决存储内存做了那些优化

本文介绍了如何通过字符串常量池、不可变字符串、StringBuilder/StringBuffer、JDK9的底层改进以及intern方法来优化内存使用,减少字符串操作中的内存消耗。重点讨论了字符串连接和比较的内存效率问题。
摘要由CSDN通过智能技术生成

字符串为了解决存储内存做了那些优化

  1. 字符串不可以变:定义的字符串存放在常量池中,下次定义相同的字符串时就直接调用原先的那个字符串的地址,减少了内存的消耗

  2. 使用StringBuffer和StringBuilder不可变的性质,如果按照字符串原先的不可变性质,如果对字符串进行拼接就会造成内存的大量消耗,此时使用StringBuffer和StringBuilder动态的对字符串进行拼接就解决了内存消耗的问题

  3. 字符串连接优化:在使用+好连接字符串时,对连接进行了优化,将其转为StringBuffer或StringBuilder进行连接,以此来解决新字符串耗费内存的问题

  4. JDK在9之后在底层存储字符串的实现上将char[]数组实现转为了byte实现,减少了内存的消耗

  5. intern:在java中相同内容的字符串会被放入字符串常量池中,以节省内存,但通过new String()创建的字符串不会进入字符串常量池,intern方法可以将字符串添加到字符串常量池中,实现字符串的共享

  6. 由于intern()可以避免创建多个相同的字符串实例,从而节省内存

  7. 字符串比较问题

    1. 使用比较两个字符串是否相等时,如果他们指向同一个常量池中的字符串对象,则结果为true,但通过new创建的,则结果为false,intern()方法可以将字符串放入字符串常量池中,使得比较的结果为true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值