当前页面: 开发资料首页 → J2SE 专题 → 一个很菜的问题 
一个很菜的问题 
摘要: 一个很菜的问题  
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是传值的这点我知道,对象的值就是地址啊!为什么了!
swap(name0, name1)
----------------------------------
你要修改的是参数本身,在代码中你直接对形参name0,name1进行赋值,这显然不会对实参产生任何的影响,因此顺序不变,依然是Killer, Miller
swap(name)
------------------------------------
这个就不一样了,你改变的不是参数本身,而是参数的一个属性。
java中,数组是对象,所以name是一个对象,name[0]、name[1]是name对象的属性,修改形参的属性,会影响到实参,因此顺序改变,也就是Miller, Killer
解释的很好!
有点像C语言里面的地址传递与数值传递一样!
swap(name0, name1)
学过C就知道  swap(int name0,int name1)
swap(int *name0,int name1)
应该没有说错吧!
2楼说得很不错了..
我昨天睡觉的时候突然想出来了,认同2楼!
2楼太棒了!