1. public class Note 
2. {
3.      public static void main(String args[]) 
4. {
5.        String name[] = {"Killer","Miller"};
6.        String name0 = "Killer";        
7.        String name1 = "Miller";
8.        swap(name0, name1);
9.        System.out.println(name0 + ", " + name1);
10.        swap(name);
11.        System.out.println(name[0] + ", " + name[1]); 
12.      }
13.      public static void swap(String name[]) 
14. {
15.        String temp;
16.        temp = name[0];
17.        name[0] = name[1];
18.        name[1] = temp;
19.      }  
20.      public static void swap(String name0, String name1) 
21. {
22.        String temp;
23.        temp = name0;
24.        name0 = name1;
25.        name1 = temp;
26.      }    
27.    }
为什么输出会是
Killer, Miller
Miller, Killer
为什么不是
Miller,Killer
Miller, Killer
呢?String和String 数组都是对象啊,他们的值实际上都应该是地址啊,JAVA是传值的这点我知道,对象的值就是地址啊!为什么了!

解决方案 »

  1.   

    swap(name0, name1)
    ----------------------------------
    你要修改的是参数本身,在代码中你直接对形参name0,name1进行赋值,这显然不会对实参产生任何的影响,因此顺序不变,依然是Killer, Millerswap(name)
    ------------------------------------
    这个就不一样了,你改变的不是参数本身,而是参数的一个属性。
    java中,数组是对象,所以name是一个对象,name[0]、name[1]是name对象的属性,修改形参的属性,会影响到实参,因此顺序改变,也就是Miller, Killer
      

  2.   

    解释的很好!
    有点像C语言里面的地址传递与数值传递一样!
    swap(name0, name1)
    学过C就知道  swap(int name0,int name1)
    swap(int *name0,int name1)
    应该没有说错吧!