日期:2014-05-18  浏览次数:20655 次

该死的参数传递机制!
public static void main(String[] args) {

     Person person = new Person();
     test01(person);
     test02(person);
     System.out.println(person.getName());
}
    
static void test01(Person person){
     person.setName("world");
}

static void test02(Person person){
     person = new Person();
     person.setName("hello");
}

看到的兄弟给个结果吧..


------解决方案--------------------
答案是 world啊,要分清引用变量和被引用的对象之间的区别,main方法里Person person=new Person();这句,你建立了一个Person类型的引用变量(相当于指针),指向new person()生成的这个person实例,假设叫做实例A。test01中调用的person指向A,调用的A的方法。而你在test02中改变了person这个引用变量指向的实例,你生成了一个新实例,假设叫做B,并调用B的方法,那么现在A的name属性是A,B的name属性是hello。然后java是值传递,所以main方法中的person还是原来的person指向A对象,所以最后打出来的是world。