Java为什么把String设计成不可变的(immutable)

在java中,String是字符串常量,可以从内存,同步机制,数据结构等方面分析

  1:字符串中常量池的需要

  String不同于普通基础变量类型的地方在于对象。java中的字符串对象都保存在字符串常量池中,创建字符串时首先会从这个常量池中查找是否已经存在相同的字符串对象,不存在的情况下才会创建新的字符串对象。

  如果字符串被设计成可变的,便存在当修改一个字符串的时候同时影响另一个指向常量池的相同对象(有潜在性风险)

  2:HashCode缓存

  在HashMap或者HashSet数据结构中,存储String是经常需要用到哈希值,String不可变的特征保证哈希值的唯一性,避免哈希引起冲突。也不必在每一次使用集合中的String对象时候重复计算哈希值,高效率。

  3:线程安全

  String的不可变性是指能够在不同线程中后共享,同时确保线程安全,帮助开发者减少线程同步的工作。

  当然,不同场景也会有不同的特性。

posted @ 2017-09-24 13:12  LiangFuCheng  阅读(469)  评论(0编辑  收藏  举报