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是传值的这点我知道,对象的值就是地址啊!为什么了!
解决方案 »
- 还是关于java泛型的问题:在静态方法中为什么不能引用类级别的类型参数?
- 线程的问题
- 急求高手 指点ubuntu下的JDK安装及配置。。
- 关于容器中iterator的用法
- SWING Tree监听器
- ★☆整理了一些常用的文档等提供下载,有一些没整出来的,有需要请留言。请大家一起交流好东西。
- java菜鸟,想请教面向对象开发如何学通学精
- !!!!!!!!!!!!!!!!!!!!help me给出详细的解释谢谢各位!!!!!!!
- AppletViewer里面可以,IE里面不行
- 哪位能解决对话框问题(急)?
- ArrayList取值问题
- 请大家解答下Graphics或Graphics2D的drawString方法是在那里实现的
----------------------------------
你要修改的是参数本身,在代码中你直接对形参name0,name1进行赋值,这显然不会对实参产生任何的影响,因此顺序不变,依然是Killer, Millerswap(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)
应该没有说错吧!