论坛首页 入门技术论坛

数组的值是怎么传递的?

浏览 1992 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-03-20  
OO
本人刚入门不久,最近在开发过程中发现了个问题不是很明白,
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却没有变呢?
   发表时间:2008-03-20  
String str = "String";这个"String"是在串池中,是个常量。而数组是NEW出来的 在堆空间。 对象的传递是按引用传递,也就是C中的传地址,因此会改变内存的值,而String是个常量 所以不能改变 你fun方法里只是改变引用的指向 去指向另外一个串池中"333333"的常量而已,对main方法里的引用不起任何作用。这里还有个概念就是实参和形参的问题,很基础的一个问题,也是新手比较容易迷惑的问题。
0 请登录后投票
   发表时间:2008-03-20  
数组传的是对象的引用,是数组在内存中的地址
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics