public class Assignment {
private int m = 0;
public void increment(){
m++;
}
public static void main(String[] args) {
Assignment a = new Assignment();
a.increment();
System.out.println(a.m);
Assignment b = a;
b.increment();
System.out.println(a.m);
}
}
举个上面的小例子,输出结果是1,2;
- 错误想法认为b和a无关,所以调用b.increment()的时候,不会对a的值造成影响
- 剖析:错误原因是语句Assignment b = a 这句话执行后,仅仅是对于a的那部分内存空间多了一个b指向的引用。换句话说,a是它内存空间的门牌号,b同样是这块内存空间,只不过换了个别名。就好比小明还有个一个英文名字xiaoming,指得都是他这个人。
这样的话我们应该很清楚了,对b修改的时候,同样是对同一块内存空间修改,所以,当我们用a来呼唤这块内存的时候,发现m已经不再是原来的m了。