大家看段代码:public class Student {
String name;
int age;
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
public void change(Student s){
s.age=10;
s.name="lisi";
} public void change2(Student s){
s=null;
}
}
public class Test {
public static void main(String[] args) {
Student stu=new Student("zhangsan",20);
stu.change(stu);
System.out.println(stu.name+" "+stu.age); //这里打印结果是 lisi 10
stu.change2(stu);
System.out.println(stu.name+" "+stu.age);//而这里为什么不报空指针异常,stu变量为什么没
//被销毁? 怎么解释?
}
}基础没学好,求指点谢谢。
为什么不报空指针异常? 我的本意是想销毁stu变量。
String name;
int age;
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
public void change(Student s){
s.age=10;
s.name="lisi";
} public void change2(Student s){
s=null;
}
}
public class Test {
public static void main(String[] args) {
Student stu=new Student("zhangsan",20);
stu.change(stu);
System.out.println(stu.name+" "+stu.age); //这里打印结果是 lisi 10
stu.change2(stu);
System.out.println(stu.name+" "+stu.age);//而这里为什么不报空指针异常,stu变量为什么没
//被销毁? 怎么解释?
}
}基础没学好,求指点谢谢。
为什么不报空指针异常? 我的本意是想销毁stu变量。
像这样public Student change2(Student s)
{
s = null;
return s;
}然后再用这个s去调用其成员函数,就会提示java.lang.NullPointerException
另外,stu引用的对象并没有改变,这和局部变量s不是一回事。
ps:java中是没有指针的,这里我只是为了方便述说所以使用了这个说法
s.age=10;
s.name="lisi";
}
s=null;
}只是先把局部变量S指向stu所引用对象,再把s指向null,stu指向从来没变过。S就像STU的别名,大家所指向的对象一样,但是你把S删除了并不影响STU,他还是存在的
s=null;
}
java中只有值传递,此时s与stu指向同一个内村地址,s=null,只是单纯的将s的对象销毁,stu还是指向原来的内存地址,所以stu没有改变,,可以画出内存地址图看下,,