class Person { 
  public String name; 

 
public class TestDemo { 
  public static void clone(Person p1, Person p2) { 
    p1.name = "被克隆的人"; 
    p2 = p1; 
  } 
   
  public static void main(String[] args) { 
    Person tom = new Person(); 
    Person jerry = new Person(); 
    tom.name = "Tom"; 
    jerry.name = "Jerry"; 
     
    clone(tom, jerry); 
    System.out.println(tom.name + “   ” + jerry.name); 
  } 

jerry的 name 为什么依然是 Jerry,clone方法中不是把对象jerry的地址改变为tom的地址了吗?

解决方案 »

  1.   

    java中的引用传递说白了还是值传递,所以传进去的这个引用就不能更改。但是可以改变该引用的对象的属性。像你上面的程序,可以改变name,但是引用本身不能改变。
      

  2.   

    因为你的name在Person类中式成员变量
    你new出Person对象时访问的是他们自己的name
    你在clone方法中把p1的引用指向p2但是p2的成员是不变的
    要想改变name请将name加static关键字改为静态的类变量就可以了
      

  3.   

    记住一句话。  java中只有值传递 ,没有引用传递
      

  4.   

    扫地寺内 把p2=p1换p2.name=p1.name     就几个字母的事 lz好懒……
      

  5.   

    因为jerry还在指向堆中的那个对象,而这个对象的name属性并没有改变
      

  6.   

    这里的引用是指???  单指对函数情况下的引用?Quote=引用 4 楼 xuyisen_1987 的回复:]
    记住一句话。 java中只有值传递 ,没有引用传递
    [/Quote]