数组到底是值传递还是引用传递?
main方法内部定义了一个sting[] a={"1","2"};
另外创建一个类 里面有2个方法
public void setA(string[] str){str[0]="A";}
public void setNull(string[] str){str=null;}我在main方法内部分别调用
setA(a);
输出a[0]="A";
setNull(a);
这个时候a数组是什么情况?为什么?

解决方案 »

  1.   

    所有的传递都是传值的。
    区别在于值类型是直接传递堆栈上的值,引用类型传递的是拷贝了指向堆的一个指针的值。
    第一个例子实参str和局部变量a都指向同一个堆地址,所以对同一块堆内存进行操作
    第二个例子实参str和局部变量a开始也是指向同一个堆地址,但在函数中你让str指向了null,而a还是指向原来的地址,所以不冲突吧。