Mutability and Immutability
1.1 Immutability(不变性)
- 不变性是一种主要的设计原则,包括:
- Immutable types(不变数据类型):不变数据类型创建完后,值不可修改。
- Immutable references(不变引用):一旦指定引用位置,不可再次指定。
- final关键字对不可变类型提供了静态检查的支持:
- A final class declaration means it cannot be inherited.(final关键字修饰的类不能被继承)
- A final variable means it always contains the same value/reference but cannot be changed. (final关键字修饰的变量,如果为基本类型,则该变量的值不能改变;如果是引用类型,则该引用的地址不能修改,但是这个引用指向的对象里面的内容可以改变)
- A final method means it cannot be overridden by subclasses.(被final修饰的方法不能被子类重写)
1.2 Mutable type and Immutable type
-
String与StringBuilder
- String是不可变类型,如果想要在已经创建的String型字符串后添加内容,则必须重新创建一个新的String对象(即String类没有修改其内容的方法)。如下:
String s = "a"; s = s.concat("b");
- StringBuilder是可变类型,可以通过调用方法修改其内容。如下:
StringBuilder sb = new StringBuilder("a"); sb.append("b");
-
可变类型的优点:
-
可以减少临时的拷贝
例如,当我们想要连接n个字符时,
String s = ""; for (int i = 0; i < n; i++) { s = s + i; }
使用String将进行许多次拷贝,第一个字符"0"将被拷贝n次,第二个字符拷贝n-1次…所以该操作的时间复杂度为O(n2)O(n^2)O(n2) 。
StringBuilder sb = new StirngBuilder(); for (int i = 0; i < n; i++) { sb.append(String.valueOf(i)); } String s = sb.toString();
使用StringBuilder可以减少过程中的拷贝。
-
便于共享对变量的操作
-