1.基本数据类型和对象数据类型
2.静态类型语言:所有变量类型再编译前已知
动态类型语言:在运行阶段进行类型检查
静态类型检查:语法、类名/函数名、参数数目、参数类型、返回值类型
动态类型检查:非法的参数值、非法的返回值、越界、空指针
3.不可变数据类型(immutable):一旦创建,值不能改变
可变数据类型:值可以被改变;
注:final的特殊性:类无法被继承,方法无法被重写,变量引用不可变(指针不能改变)
4.Snapshot diagram 快照图:不可变引用用双线,不可变数据类型用双线椭圆
注:不可变引用指向的值可能可变
可变的引用指向的值也可能不可变
5.Array and Collections
Iterator
mutable类型,有两种方法:next()和hasNext(),next()方法是mutate的
需要注意,当用Iterator迭代List中元素,涉及到remove时,由于remove后List内元素索引会发生改变,会出现错误。
Collections
基本类型及其封装对象类型都是immutable的
List、Map、ArrayList等都是mutable的
可以利用Collections类提供的方法将mutable类包装成immutable
Collections.unmodifiableList Collections.unmodifiableSet Collections.unmodifiableMap
这种包装器得到的结果是不可变的,只能看,不能修改(其实就是disabled了一些mutate方法或者让其抛出异常)
这种”不可变“是在运行阶段获得的,编译阶段无法对此进行静态检查
虽然不能用包装后的对象对其进行修改,但依旧能用包装前的对象进行修改