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

Posted AX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java为什么把String设计成不可变的(immutable)相关的知识,希望对你有一定的参考价值。

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

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

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

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

  2:HashCode缓存

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

  3:线程安全

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

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

以上是关于Java为什么把String设计成不可变的(immutable)的主要内容,如果未能解决你的问题,请参考以下文章

Java中的String为什么要设计成不可变的?

Java的String为什么要设计成不可变类

java中String为什么设计成不可变对象

Java String为什么是不可变类,StringBuffer与StringBuilder区别

Java String类为什么不可变?

重学设计模式(三设计模式-享元模式)