一、原始类型(primitives)
- 包括:int, long, byte, short, char,
float, double, boolean - 除去这8种数据类型,其他(包括class,数组)都是引用(reference)类型
- java中,int类型的1和boolean类型的true之间不能互相替换
二、静态检查
- 静态检查仅仅检查类型,不检查值
三、immutable和mutable
1. 改变变量与改变变量的值
- 改变一个变量:改变这个变量指向的地址
- 改变一个变量的值:改变这个变量指向的地址的内容
2. immutable数据类型
- 不变数据类型:一旦被创建,其值不能改变
3. final关键字(immutable)
- final作用于primitive上,则这个变量相当于常量
- final作用于reference上,则这个reference不能再指向其他内容
- 例如:
final StringBuilder s = new StringBuilder("hello");
StringBuilder t = new StringBuilder("hi");
s = t;
最后一行会报错。因为,尽管StringBuilder是可变的,但是因为final关键字,s所指向的地址不能再变为其他的StringBuilder
4. List< L >
List< L >中存储的是L的地址的拷贝,例如:
String s1 = new String("abc");
List<String> list = new ArrayList<>();
list.add(s1);
s1 = s1.concat("d");
System.out.println(list.get(0)); //输出 abc
String s2 = s1.concat("e");
list.set(0, s2);
System.out.println(list.get(0)); //输出abcde
五、迭代器
- 使用迭代器删除某个元素,例如:
Iterator iter = subjects.iterator();
while (iter.hasNext()) {
String subject = iter.next();
if (subject.startsWith ("6.")) {
iter.remove();
}
}
六、用immutable修饰Collections
- List、Map等都是mutable的,它的内部元素可以改变
- 可以将mutable的Collections修饰为immutable,例如:
List<Integer> list = new ArrayList<>();
list.add(1);
List<Integer> immutable_list = Collections.unmodifiableList(list);
immutable_list.add(2);