数据类型与类型检验:
基本数据类型:只有值没有ID、在栈中分配内存、代价低
对象数据类型:既有ID也有值、在堆中分配内存、代价昂贵
所有的类默认继承了Object
继承:一个子类可以拥有父类所有可见的方法
基本类型对应的对象类型(将基本类型包装为对象类型):Boolean、Integer、Short、Long、Character、Float、Double
通常是在定义容器类型的时候用到它们的对象类型,例如Set、List、map
一般情况下尽量避免使用其对象数据类型,以免降低性能
同样的操作名可以用于不同的数据类型(重载)
根据检查的时间点可以分为:静态检查、动态检查和无检查
静态检查:在编译阶段进行检查,在编译阶段、运行之前
动态检查:在程序进行中进行检查
动态/静态检查与动态/静态类型语言无关
好处:静态检查>动态检查>无检查
静态检查可以发现:语法错误、类名/函数名错误、参数数目错误、参数类型错误、返回值类型错误
动态检查可以发现:非法参数值、非法的返回值、越界、空指针
静态检查主要是检查类型,动态检查主要是针对特定值的
不变对象:一旦被创建,适中指向同一个值/引用
可变对象:拥有方法可以修改自己的值/引用
不可变类型的缺点:使用不可变类型,对其频繁修改会产生大量的临时拷贝(需要垃圾回收)
可变类型最少化拷贝,以提高效率
使用可变数据类型,可以获得更好的性能
可变数据类型有时会发生不易发现的错误,必要时可以使用防御式拷贝
可变对象用单线椭圆表示,不可变对象用双线椭圆表示
注意学习List,Set,Map的用法。