java string

string不可变

1.string缓存在常量池,java多线程环境修改string会有风险;
2.打开文件/网络连接/数据库链接都可以使用string,比如说string文件名,获取权限open之后如果string可以修改,那其他文件的也能得到权限;
3.map大量使用string作为key,当key可以修改,那hashcode不变情况,map中value会丢失

对于敏感信息char[]比string存储更好

1.由于string的不可变性,string存在就不能修改,而且可能存在内存中不被gc回收,通过java的dump文件可以获取到缓存的string;
2.打印日志误操作打印string,char[]直接打印是不会打印字符串;

note:下面链接1提到substring造成内存泄漏新的jdk已经修复,substring会new一个新的string,以前是直接通过改变value[]的offset来重新new的,value[]太大substring一个小的string还是会缓存很大的value[]

参考


  1. https://javarevisited.blogspot.com/2010/10/why-string-is-immutable-or-final-in-java.html
    https://javarevisited.blogspot.com/2012/03/why-character-array-is-better-than.html ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值