日期:2014-05-20  浏览次数:20600 次

引用传递的一个问题
public class TestRefObj {

public static void main(String[] args) {
Person person = new Person("xxxx");
TestRefObj testRefObj = new TestRefObj();
testRefObj.test(person);
System.out.println(person.x);
}

public void test(Person p){
p = new Person("yyyy");
System.out.println(p.x);
}
}

class Person{
public String x;
public Person(String x){
this.x = x;
}
}

运行结果是
yyyy
xxxx

函数调用不是应该引用传递吗?
我觉得应该是
yyyy?
yyyy
请高手解释下

------解决方案--------------------
java只有值的拷贝传递

public void test(Person p){// 传进来的是p对象的引用值的拷贝
p = new Person("yyyy");// 传递的p值已经改变,引用了另一个对象
System.out.println(p.x);
}
------解决方案--------------------
关于java中的方法参数传递,我信奉一句话:java一直都是按照值传递的,而且是把实参的值拷贝一份传给形参去执行方法代码块,但是:对于基本类型的实参变量,拷贝的就是值,没什么说的,执行的是拷贝,也就与实参没有任何关系了,方法内部的操作不会影响到实参
对于引用类型的实参,同样是拷贝一份给形参,但是拷贝的是引用,也就是指向同一个对象的地址,传递给方法的是指向同一个对象的引用,里面的操作是对同一个对象的操作,反过来你在用实参调用对象,对象也许改变了