数据类型
基本数据类型:只有值,没有ID (与其他值无法区分) 在栈中分配内存 代价低 不可变
int,long,boolean,double,char
对象数据类型:既有ID,也有值 在堆中分配内存 代价昂贵 可变\不可变
String,BigInteger
对象类型形成层次结构:继承关系(extends)
重载
同样的操作名可用于不同 的数据类型
类型转换
int a = 2; // a = 2
double a = 2; // a = 2.0 (Implicit)
int a = (int) 18.7; // a = 18 double
a = (double)2/3; // a = 0.6666…
Mutability与Immutability
改变一个变量:将该变 量指向另一个值的存储空间
改变一个变量的值:将 该变量当前指向的值的存储空间中写入一个新的值。
Immutability 不变性
不变性:重要设计原则
不变数据类型:一旦被创建,其值不能改变
如果是引用类型,也可以是不变的:一旦确定其指向的对象,不能再被改变
final:final类无法派生子类 final变量无法改变值/引用 final方法无法被子类重写
不变对象:一旦被创建,始终指向同一个值/引用
可变对象:拥有方法可以修改自己的值/引用
String是不可变的
StringBuilder是可变的
使用 不可变类型,对其频繁修改会产生大量的临时拷贝(需要垃圾回收),不可变类型更“安全”, 在其他质量指标上表现更好
可变类型最少化拷贝以提高效率,使用可变数据类型,可获得更好的性能
Snapshot
用于描述程序运行时的内部状态,便于程序员之间的交流,刻画各类变量随时间变化,解释设计思路
基本类型的值
对象类型的值
不可变对象:用双线椭圆
不可变的引用:用双线箭头
引用是不可变的,但指向的值却可以是可变的,可变的引用,也可指向不可变的值