3.1数据类型和类型检验
3.1.1数据类型
- 基本数据类型(8种)
int, long, byte, short, char,float, double, boolean - 对象数据类型
如:String、BigInteger
两者对比:
ps:将基本类型包装为对象类型,如:Boolean,Integer,Short,Long,Character,Float,Double通常是在定义集合类型的时候使用它们,一般情况下避免使用。
3.1.2静态、动态数据类型检查
静态类型语言,如java,在编译阶段进行类型检查,动态类型语言如python在运行阶段进行检查。
- 静态类型检查,在编译阶段检查,避免了将错误带入到运行阶段,可提高程序的正确性/健壮性。可检测的错误包括:语法错误、类名/函数名错误,参数数目错误,参数类型错误,返回值类型错误。
- 动态类型检查在运行阶段检查。可检测的错误包括:非法的参数值、非法的返回值、越界、空指针。
总结:静态检查是关于“类型”的检查,不考虑值,而动态检查,是关于“值”的检查。
3.1.3可变性和不变性
改变一个变量和他的值的区别:
改变一个变量:将该变量指向另一个值的存储空间
改变一个变量的值:将该变量当前指向的值的存储空间中写入一个新的值。
不变数据类型:
- 一旦被创建,其值不能改变
- 如果是引用类型,也可以是不变的:一旦确定其指向的对象,不能再被改变。
Ps: 用final声明,可以让引用不可变。(静态检查时,如果无法确定final变量不会改变,会提示错误)因此要尽量使用final变量作为方法的输入参数。
final:- final类无法派生子类
- final变量无法改变值/引用
- final方法无法被子类重写
可变数据类型和不可变数据类型:
尽管不可数据类型,进行copy,会比较麻烦,性能表现不是很好,但是在表现和性能上折中,应更看重安全。
而局部变量则可以放心的使用可变类型,因为不会涉及共享,只有一个引用。