public class Person { /**
* @param args
*/
int i=100;
void chage(Person p){
p=null; //1
}
public static void main(String[] args) {
Person pp=new Person();
pp.chage(pp);
System.out.println(pp.i);
}
}
//output:
100
chage方法中是按照的引用方式传递 那么pp不是应该指向的是null吧 而为什么事实却不是如此呢?高手来帮帮忙啊!!
void chage(Person p){
p=null; //1
}
中的p不是一个东西。
不过这个例子够经典的,想让本身成为null吗?
如果不是那么
public class Person { /**
* @param args
*/
int i=100;
void chage(Person p){
p.i=1;
}
public static void main(String[] args) {
Person pp=new Person();
pp.chage(pp);
System.out.println(pp.i);
}
}
pp.i是不应该改变的啊 但是 实际是改变了啊 i=1了?
自己改变自己? 写个static 的change试试
p.i是改变了对象的数据,因为pp和p引用的是一个对象,当然起作用
p=null;是改变了p这个引用,让p指向null,p不和pp指向同一个对象了而已。跟pp就没有关系了。
* @param args
*/
int i=100;
void chage(Test p){
p.i=1;
}
public static void main(String[] args) {
Test pp=new Test();
pp.chage(pp);
Test t = new Test();
System.out.println(pp.i);
System.out.println(t.i+"********");
}
}
你这样测试一下就知道了,输出的结果分别为,1和100
p=null; //这个P开始指向和pp对中的同一个对象,然后有指向了null并不影响pp的指向,他改变的只是他自身的指向
}
Java Virtual Machine Specification有中文版吗
thanks
* @param args
*/
int i=100;
Person chage(Person p){
p=null; //1
return p;
}
public static void main(String[] args) {
Person pp=new Person();
pp=pp.chage(pp);
System.out.println(pp);
}
}
output:null不是涉及到引用就是引用传递,这分明是个值传递问题。
java的设计者们选择术语的时候也有问题。
http://blog.csdn.net/niuniu20008/archive/2008/09/19/2953785.aspx
public static void main(String[] args) {
Person p1 = new Person ();
Person p2 = p1;
p2=null;
//here p1=?
}
}这样就明白了~