软构复习
可变、不可变
改变一个变量和改变一个变量的值的区别
改变一个变量:将该变量指向另一个值的存储空间。
改变一个变量的值:将该变量当前指向的值的存储空间中写入一个新的值。
final关键字
如果一个变量被声明为final,它只能被赋值一次。final变量无法改变值/引用,final方法无法被子类重写,final类无法派生子类。变量声明包括局部变量的声明,方法/构造函数的形式参数,实例变量和类变量。如果编译器无法确定final变量不会改变,就提示错误,这也是静态类型检查的一部分。
Mutability and Immutability
不变对象:一旦被创建,始终指向同一个值/引用
可变对象:拥有方法可以修改自己的值/引用
String类型就是一种不可变类型,在用调用concat()方法后,s原本指向位置的值并不会改变,s会指向一个新的串ab。
String s = "a";
s = s.concat("b");
相对应的,StringBuilder是一种可变类型,可以改变对象的值
StringBuilder sb = new StringBuilder("a");
sb.append("b");
两者的差异在有多个引用指向同一个值时体现出来,对不可变类型的修改会进行临时拷贝,若t和s都指向"sb",则对t进行修改时不会影响s,而对于不可变类型来说,因为没有进行拷贝而是对值进行修改,对t的修改就会导致s的值也发生变化。两者相比之下,前者更为安全,而后者效率较高也适合在多个模块直接共享数据。