博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String 为什么要设计成不可变的
阅读量:6520 次
发布时间:2019-06-24

本文共 430 字,大约阅读时间需要 1 分钟。

String不可变:String值储存在常量池中。一个已有字符串"abcd",如果改变值成"abcedl",不是在原内存地址上修改数据,而是在常量池中查找或生成这个新值,再把引用指向新值的地址,如图:

为什么不可变

  1. String 类本身是final的,不可以被继承
  2. String类内部通过private final char value[]实现,从而保证了引用的不可变和对外的不可见
  3. String内部通过良好的封装,不去改变value数组的值

为什么要设计成不可变

1. 安全性

  1. 线程安全,不可变天生线程安全
  2. String常被用作HashMap的key,如果可变会引有安全问题,如两个key相同
  3. String常被用作数据库或接口的参数,可变的话也会有安全问题

2. 效率

  1. 通过字符串池可以节省很多空间
  2. 每个String对应一个hashcode,再次使用的话不用重新计算

扩展

可以用反射来改变String中value的值,所以严格意义上说不一定不可变

参考资料

转载地址:http://avrfo.baihongyu.com/

你可能感兴趣的文章
MyBatis原理简介和小试牛刀
查看>>
js部分基础
查看>>
脏读,幻读,不可重复读解释和例子
查看>>
Tomcat指定(JDK路径)JAVA_HOME而不用环境变量
查看>>
Bluemix专属版本落地中国 开放物联网和认知计算能力
查看>>
汤姆大叔的6道javascript编程题题解
查看>>
【世界知名量子科学家加盟阿里】施尧耘出任阿里云量子技术首席科学家
查看>>
DataCore对外出售其虚拟化软件产品
查看>>
说说云计算与移动管理
查看>>
T-Mobile美国使用28GHz频段测试5G
查看>>
如何缓解影子云服务安全风险?
查看>>
银行卡信息安全事件频发 互联网站成数据泄露"重灾区"
查看>>
云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性创建ECS实例
查看>>
象云2.0产品发布暨国产操作系统首次入驻公有云
查看>>
一个完美DCIM应该具备的功能与价值
查看>>
《SEO的艺术(原书第2版)》——1.5 人们如何搜索
查看>>
经验贴 | 电梯监控的布线技巧
查看>>
研究显示:广告拦截应用正在破坏互联网
查看>>
优云·小课堂 第八期:运维自动化的魅力
查看>>
写个软件来防止服务器网站CPU百分百
查看>>