快照图(Snapshot diagrams)
快照图表示运行时程序的内部状态,这包括栈(stack,存放运行中的方法及方法的局部变量)的情况,和堆(存放当前程序中存在的对象)的情况
快照图的具体表示:
- 基础数据类型:
- 用指向一个数字的箭头来表示
箭头表示某个变量或某个对象中的字段对这些值的引用 - 对象数据类型:
- 用有箭头指向的圆圈来表示,圆中写着该对象的类型(如上图中的Point)
我们可以在圈中写入字段名,并用箭头指向它们的值(也就是对上面说的基础数据类型的一个引用)(中间的图)
我们也可以加入更详细的信息,也就是字段的具体的值。右图中的int x也可以写成x:int
对值的改变(mutate),以及对引用的改变(resign)
- 对一个变量或字段(不可变数据类型immutable)进行赋值时,改变的是变量的箭头指向的位置,它指向了一个不同的值
- 对一个可变数据类型进行赋值时(如数组或列表),改变的不是引用,而是引用所指向的值(箭头没有变,数值变)
final
关键字意味着“引用的不变性”(unreassignable),也就是说,一个变量的引用一旦被确定(被赋值),就不能再被改变(一个箭头一旦指向了一个地址,就不能再被指向其它地址)
一个被final
修饰的引用用下面这种箭头来表示:- 需要注意的是,如果用
final
修饰一个可变数据类型,那么,尽管引用不会改变,但引用所指向的地址里的值仍可能改变
如final StringBuilder sb
,虽然由final,但sb的值仍可以被改变