本来觉得很简单的问题,结果在做链表算法题的时候摔了跟头。。。
所以在此特别记录一下,还是要多注意细节啊
实例一:
public class Test{
public static void main(String[] args) {
A a1 = new A();
A a2 = a1;
a1.x =2;
System.out.println(a1.x);
System.out.println(a2.x);
}
}
class A{
int x;
}
输出:
分析:A a2 = a1这行代码,让a2指向了a1所指向的地址,所以a1和a2指向的是同一个地址。所以即使代码中没有对a2进行操作,a2.x还是有值的,且与a1.x的值相同。
实例二:
public class Test{
public static void main(String[] args) {
A a1 = null;
A a2 = a1;
a1 = new A();
a1.x =2;
System.out.println(a1.x);
System.out.println(a2.x);
}
}
class A{
int x;
}
结果:
分析:A a2 = a1 虽然让a2指向了a1所指向的地址,可a1此时为空并没有所指的地址,导致a2也没有地址所指向,所以a2也是空,a1和a2并没有任何的联系,所以正确的输出a1.x后,下一行就会报空指针异常。