为什么 String 是不可变的
- Java
- 2021-04-22
- 119热度
- 0评论
1 为什么 String 是不可变的
查看源码,发现 String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。
2 这样设计的好处
- 可以视为常量,这样 Java Runtime 可以节省大量的 Java 堆空间,因为不同的 String 变量可以在 String Pool 中引用相同的 String 对象;
- 保障安全性。对于密码等敏感信息,用 String 对象表示,在方法调用的过程中肯定不会被修改;
- 线程安全,一个 String 实例可以在不同的线程中共享,不需要使用同步机制;
- 它的 hashcode 在创建时就被缓存了,一旦生成绝不改变,不需要再次计算。(因此 HashMap 常用 String 作为 key)
ref:
- String 设计成不可变类的好处? OR 为什么要将String设计成不可变化的?
- 《effective java》中有一节专门讨论“不可变类”。