求助:关于java引用类型的疑问~
自定义类,都应该属于引用类型吧。
求人解释一下,两个引用指向同一个对象,其中一个设置为null了,为什么另一个引用还可以使用该对象?
Java code
public static void main(String[] args) {
Student stu = new Student();
stu.setName("张三");
Student stu2 = stu;
System.out.println(stu.hashCode());
System.out.println(stu2.hashCode());
stu = null;
System.out.println(stu2.getName());
}
打印结果:
11108810
11108810
张三
而我期待的结果,应该是报一个
空指针异常才对。因为stu为null了,stu2也应该为空,可是结果不是这样啊
------解决方案--------------------求人解释一下,两个引用指向同一个对象,其中一个设置为null了,为什么另一个引用还可以使用该对象?
分清了....引用与对象.
让一个引用为null,就是说让这个引用不指向任何对象.
并不是说让这个对象消失了.因为你有另外的引用还在引用着这个对象,所以对象不会被销毁.
Student stu = new Student();
stu.setName("张三");
Student stu2 = stu;
System.out.println(stu.hashCode());
System.out.println(stu2.hashCode());
stu = new Student();//改一下,不是null,而是让它引用新的对
象,这样可能就更好理解了.
stu.setName("李四");
System.out.println(stu2.getName());
System.out.println(stu.getName());
------解决方案--------------------本来stu和stu2都是指向同一个Student对象,
当stu=null后,只是将stu指向null,并没有影响到Student对象.stu2仍然指向那个Student对象.
------解决方案--------------------String stu2=stu;
这一句是创建一个Student 类型的变量 stu2 同时让stu2指向stu所指向的那个对象,而不是让stu2指向stu。
------解决方案--------------------堆现有一个student对象,stu指向它,后来stu2又指向它,再后来又让stu指向null的对象
但是此时stu2还是指向堆中的student对象