String类为什么是不可变的
Java 中 String 类的「不可变」,指的是:一个 String 对象一旦被创建成功,它的「字符内容」和「内存地址」就永远无法被修改。
我们平时写的 String str = "abc"; str = "def"; 并不是修改了原对象,而是创建了一个新的 String 对象,把变量的引用指向了新对象,原对象 "abc" 纹丝不动
核心原因:从源码层面彻底讲透(3 个底层设计,面试答全这 3 点 = 满分)
- 原因 1:String 类被 final 关键字修饰
四 为什么要把String类设计成不可变的(这样设计的好处)。
4.1 大幅度节省内存
4.2 保证【哈希值唯一不变】,提升 HashMap 等集合的效率
4.3 天生【线程安全】,多线程环境下无并发问题
4.4 保证【数据安全性】,防止核心数据被恶意篡改
其他的不可变类
String、Integer/Byte/Short/Long/Boolean/Character/Float/Double、BigInteger、BigDecimal、Enum 枚举类。