如下代码:public void f1(){
   Person p = new Person("zhangsan");
   f2(p);
   //Here p的名字还是zhangsan,希望是李四,怎么办?
}public void f2(Person p){
  p = new Person("lisi");
}

解决方案 »

  1.   

    这个问题没办法,在C++里也是一样,你不要new 一个对象,直接:public void f2(Person p){
      p1=new Person("lisi");
      p=p1;
    }这样就OK了,f2里的p不过是f1里的p的一个句柄的复制,只不过两个p都是指的同一个对象而以。
      

  2.   

    public class Person(){
       private String name;   public void setName(String name){
          this.name ="lisi";
       }
    }public void f1(){
       Person p = new Person("zhangsan");
       f2(p);
       //Here p的名字还是zhangsan,希望是李四,怎么办?
    }public void f2(Person p){
      p.setName("lisi");
    }
      

  3.   

    谢谢gangliao,你说的对,那两个是句柄的复制,但是你说的方法也不对。
    to:mofeir,我不是这个意思。
      

  4.   

    我想问的是,除了在Person上再封一层,比如改成只有一个元素的数组,java里是否还有其他办法?
      

  5.   

    Java不允许修改传入变量的指向地址,所以你希望new一个对象后再修改传入参数的做法是不行的。不过你可以修改你的函数啊,改成返回值
    public Person f2(Person p){
      return new Person("lisi");
    }外面调用就 p = f2(p);这样
      

  6.   

    同意 ChDw(米) 
    把你要的东西return就可以啦
      

  7.   

    通过某个api返回该对象的物理地址和size,然后再通过某个api读出该物理地址存放的值
      

  8.   

    Person p = new Person("zhangsan");
    void f2(Person p1){}
    这里传入的p1只是指向对象实例p引用的拷贝.所以你怎么修改这个引用的拷贝p1,都不会影响原来的引用p,因为两个是独立的"指针".