Java 中的String 被设计为不可变

Java 中的String 被设计为不可变对象主要有两方面的原因

1. 高效 2. 安全

String Pool

当一个字符串被创建,另一个相同的内容的字符串创建时,会引用String 缓冲池中已经存在的对象,而不是从新创建一个对象

下面的代码只会在堆中创建一个String对象

String string1 = "abcd";
String string2 = "abcd";

 

 

 Hashcode

String经常被用作HashMap 或者HashSet的key,如果String是不可变的,有利于保证Hash值一直是不变的,我们也不需要一直修改hash值

有利于其他对象

有些对象比如HashSet,内部的值是唯一的,如果String可以修改,那么HashSet<String> 就可能违反他的内部元素唯一性

 

安全

String经常作为类中被使用,如果他是可变的,方法在使用某个String时,他被修改了,会有很严重的安全风险

 

保证了线程的安全

String的不可变性使他可以被多个线程共享

 

posted @ 2021-03-18 01:20  hulian425  阅读(113)  评论(0编辑  收藏  举报