浏览 247 次
|
该帖已经被评为新手帖
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-03-20 关键字: array
本人刚入门不久,最近在开发过程中发现了个问题不是很明白,
public class Test { public static void main(String args[]){ String str = "String"; int [] arr = {1,2}; Test2 t2 = new Test2(); t2.fun(str); t2.fun2(arr); System.out.println(str); System.out.println(arr[0]); System.out.println(arr[1]); } } class Test2 { public void fun(String str){ str = "3333333"; } public void fun2(int[] arr){ arr[0]=100; arr[1]=200; } } 输出结果: String 100 200 为什么只是调用了test2方法确使得数组的值发生了变化,String却没有变呢? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-03-20
String str = "String";这个"String"是在串池中,是个常量。而数组是NEW出来的 在堆空间。 对象的传递是按引用传递,也就是C中的传地址,因此会改变内存的值,而String是个常量 所以不能改变 你fun方法里只是改变引用的指向 去指向另外一个串池中"333333"的常量而已,对main方法里的引用不起任何作用。这里还有个概念就是实参和形参的问题,很基础的一个问题,也是新手比较容易迷惑的问题。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-03-20
数组传的是对象的引用,是数组在内存中的地址
|
|
| 返回顶楼 | |




