ch4 基本数据类型
静态类型语言:所有变量的类型在编译时已知,编译器可以推导表达式类型,可以在编译阶段进行类型检查
动态类型语言:变量类型在编译时未知或不需要知道,在运行阶段进行类型检查
有些问题静态检查和动态检查都无法检测出来,如整数除法(截断整数)、整数溢出、浮点数的特殊类型:
NaN,POSITIVE_INFINITY, NEGATIVE_INFINITY等
这个答案是不是第三个是整数除法截断不检查出错误,第4个是整数除零动态检查出错,第5个是浮点除零得inf检查不出错但是返回错误答案
什么是不可变
当数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。如String。
每个String的变量只能指向一个不可变的对象,如果需要将对象进行改变,就需要将变量指向新的改变之后的对象,最终产生两块内存空间,分别用来存储新旧两个对象。
这种数据类型一旦被创建,其值不能改变;引用类型一旦确定其指向的对象,不能再给变其指向其他对象。
fina类无法派生自己的子类
final变量无法改变值/引用
final方法无法被子类重写
当数据类型的对应变量的值发生了改变,而它对应的内存地址不发生改变,对于这种数据类型,就称
可变数据类型。如StringBuilder。
每个String Builder的变量可以指向一个可变的对象,如果需要将对象进行改变,则直接在当前变量指
向的内存空间进行修改即可,最终还是只有一块内存空间。
对于可变对象,它可以拥有变值器(mutator),对自己的引用/值进行修改而不改变内存位置。
尽量不用mutable 参数