
部分内容转自知乎:https://www.zhihu.com/question/31345592
从自己的理解进行加工,压缩。
String本质上是一个final类
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
内部是一个 private final char数组,内部的所有方法都没有对这个char[]中的值进行修改。
所以外部看起来他是不变的。
不变有很多的好处,例如在想得到一个字符串的追加串。
//不可变的String
public static String appendStr(String s) {
s += "bbb";
return s;
} //可变的StringBuilder
public static StringBuilder appendSb(StringBuilder sb) {
return sb.append("bbb");
}
用String就可以避免原串的改变,因为后面很可能会用到。
还有就是在HashMap中会经常用到,这种对key有唯一性约束的数据结构,key一定要是immutable。如果key是mutable那个很可能在你不小心的操作中破坏这种唯一性。
最后就是,字符串有一个字符串常量池的东西,这可以大大节省内存。然而要实现字符串常量池就基本的操作就是把String设置成immutable。