java吧 关注:1,298,288贴子:12,836,881
  • 24回复贴,共1

【求助】为什么数组不能在方法中改变引用

只看楼主收藏回复

public class Test{
public static void main(String[] args){
int[] out =new int[]{1,2,3};
int[] in=new int[]{4,5,6};
test(out,in);
System.out.println(out[0]);
System.out.println(out[1]);
System.out.println(out[2]);
}
public static void test(int[] s,int[] s1)
{
s=s1;
}
}
为什么输出还是1,2,3?


1楼2012-11-08 18:33回复
    坐等大神


    2楼2012-11-08 18:34
    收起回复
      2026-02-27 10:54:52
      广告
      不感兴趣
      开通SVIP免广告
      java值传递


      IP属地:上海3楼2012-11-08 18:35
      收起回复
        从main里面把out和in数组的地址复制了一份到test里面
        如果在test里面修改s&s1数组里的值的话 由于这里的s&s1所引用的内存空间是和out&in所引用的是同一块 所以对里面值是可以做出的修改
        但如果单纯把s和s1的值做出调换 并不会对main中的in&out做出任何影响 因为他只是复制的一份引用
        应该对吧...希望别误人子弟了..有错的话大神们再帮改吧..


        5楼2012-11-08 18:42
        收起回复
          个人意见哈,这是pass by value 和pass by reference的问题,其实你有4个数组,in,out,s,s1,你的方法里面有2个参数,s和s1,当你test(out,in)的时候,你是把out和in的值分别传递给了s和s1,传递的是数值而不是引用,所以这时候out和in都没改变,s和s1则分别拥有in和out的值,s=s1只会影响s和s1而不会影响in和out。其实主要就是一句话,传递的是数值的拷贝而不是引用。
          希望我没误人子弟。。。


          IP属地:上海6楼2012-11-08 18:54
          收起回复
            参看精华贴:
            http://tieba.baidu.com/p/1861329720


            IP属地:法国7楼2012-11-08 19:15
            回复


              IP属地:河北8楼2012-11-08 19:49
              收起回复
                老帖了哈,我还是回一下,是这样的,当形参是引用数据类型,主方法调用方法的时候相当于把主方法实参的变量地址A(在栈内存)的地址拷贝给方法的形参地址B(在堆内存),你在方法内只能对B进行操作,对A没有影响的。即一个在堆,一个在栈是没有影响的


                IP属地:上海11楼2018-04-27 11:08
                回复