String类为什么要设计成final
1.不可变有什么好处?
这个最简单地原因,就是为了安全。看下面这个场景:
public static void main(String[] args) {
String a, b;
a = “test”;
b = a;
b = b + “b”;
System.out.println(a);
System.out.println(b);
}
//此时输出
//test
//testb
如果使用StringBuffer来模拟String:
public static void main(String[] args) {
StringBuffer a, b;
a = new StringBuffer(“test”);
b = a;
b = b.append(“b”);
System.out.println(a);
System.out.println(b);
}
//此时输出
//testb
//testb
b的值改变导致a的值也发生了变化,这样就非常不友好了,就像两个人A和B去吃饭,A点了份蛋炒饭,这时B说我和A一样,String就相当于服务记录了两条点餐信息,A点了蛋炒饭,B点了蛋炒饭,如果B此时改变主意点了蛋炒面,这时服务员把B点了蛋炒饭划掉,重新写一条B点了蛋炒面,这是不会上错菜,而StringBuffer就相当于写了一条点餐信息A、B点了蛋炒饭,而此时如果B改变主意点了蛋炒面,就相当于点菜单改为A、B点了蛋炒面,这时如果上了两份蛋炒面你想想A是什么心情,我点的蛋炒饭,你给我上了个蛋炒面不想吃