在这次博客中,将解释snapshot diagram的画法。
snapshot diagram是一种表示程序运行状态的图,可以用来分析一些问题。
首先是基本类型,如int,char之类,直接使用一个单线箭头指过去即可。如:
然后是需要画圈的类型,这个类型又细分为需要使用单线圈和双线圈,使用单线圈的是代表对象是mutable的,后者则代表对象是immutable的,如:
然后,是从圈里往外指的类型,这里分为需要用单线的和双线的,我个人的理解是final这种不可变的就用双线,其余的可变的用单线就行,如:
在代码中,可能是:
List<Object> L = List<>;
String S = new String("AB");
L.add(S);
L.add(5);
下面用这种思路去实际的解决一道往年试题:
我们可以尝试着画一下图,一开始生成一个s:
然后,在a中添加之,注意这里添加的实际上是这个字符串,所以画成:
然后,s发生了变化,由于s是String类型,是immutable的,所以需要新建一个s对象,变成:
之后,复制一个b,我们可以知道,b中的元素实际上还是“xyz”,因此此时再添加“xyz”进去不会有任何效果,所以,我们能够推知答案:a.size = 1,b.contains("x") = false,所以答案应为B:1,false
我们在eclipse中跑一下进行验证:
确实如此。