站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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楼太棒了!


↑返回目录
前一篇: ArrayList取值问题
后一篇: 有人玩JNI的吗?