ADT(Abstract Data Type) 抽象数据类型
OOP(Object-Oriented Programming) 面向对象的程序设计
数据类型
基本数据类型 | 对象数据类型 |
int, long, byte, short, char, float, double, boolean | Classes, interfaces, arrays, enums, annotations |
只有值,没有ID(与其他值无法区分) | 既有值也有ID |
不可变 | 可变 |
在栈中分配内存 | 在堆中分配内存 |
代价低 | 代价昂贵 |
基本数据类型的声明方式:
int a = 0;
对象数据类型的声明方式:
List<String> = new ArrayList<>();
将基本类型包装为对象类型:Integer,Double,Boolean,Long,Character,Float等,通常在定义集合类型的时候使用,除此之外一般要避免使用这些类型。
类型检查
静态类型检查:在编写代码时进行检查。能检查的错误有语法错误、类名/函数名错误、参数数目错误、参数类型错误、返回值类型错误等。是关于“类型”的检查。
动态类型检查:在代码运行时进行检查。能检查的错误有非法参数值、非法返回值、越界、空指针等。是关于“值”的检查。
无检查:从不检查。
可变和不可变
改变一个变量:将该变量指向另一个值的存储空间。
改变一个变量的值:将该变量当前指向的值的存储空间中写入一个新的值。
不变对象:一旦被创建,始终指向同一个值/引用。
可变对象:拥有方法可以修改自己的值/引用。
例如,String是不可变的,将"a"变成"ab",实际上是创建一个新的内容为"ab"的String;而StringBuilder是可变的,将"a"变成"ab",则是直接改变其值。
两者各有优缺点,使用可变类型,可获得更好的性能,但安全性欠佳;不可变类型在修改时会产生大量垃圾,可它更加安全。
Sanpshot Diagram 规则
1.基本类型的值