黑马程序员技术交流社区

标题: 数组的问题 [打印本页]

作者: 文密    时间: 2013-3-3 15:14
标题: 数组的问题
本帖最后由 文密 于 2013-3-3 19:08 编辑

public class Test {
public static int[] a=new int[]{1,2,3,4,5};
   public int foo(int[] b){

    a[1]=b[2]+a[3];
   b[1]=a[1]+a[2];  
    return a[1]+b[1];
   }
public static void main(String[] args) {
    System.out.println(new Test().foo(a));
}
}

为什么输出的结果会是20??????????
作者: 张洪慊    时间: 2013-3-3 15:43
//注意:a,b两个引用变量 都指向 同一个数组对象,因此通过a改变数组元素的值,则b再引用为 改变后的值
public class Test {
public static int[] a=new int[]{1,2,3,4,5};
   public int foo(int[] b){

    a[1]=b[2]+a[3]; //3+4-->a[1](b[1])=7
   b[1]=a[1]+a[2];  //7+3-->b[1]=10/a[1]=10

    return a[1]+b[1];//10+10
   }
public static void main(String[] args) {
    System.out.println(new Test().foo(a));
}
}

作者: wahaha    时间: 2013-3-3 15:46
System.out.println(new Test().foo(a)); //调用函数foo,将数组a的首地址赋给b,也可以理解为a == b;a[]和b[] 实际上操作的是同一个数组

//int[]{1,2,3,4,5};
a[1]=b[2]+a[3]; //数组变成 {1,7,3,4,5}, 因为 a[1]=3+4=7;

// {1,7,3,4,5}  
b[1]=a[1]+a[2];  //数组变成{1,10,3,4,5} ,因为b[1]=7+3=10;

//{1,10,3,4,5}
return a[1]+b[1];  返回值是  a[1]+b[1]=10+10=20


作者: 邹学良    时间: 2013-3-3 16:12
a[1]=b[2]+a[3]返回值给int[] 重新赋值a[1]=7
b[1]=a[1]+a[2]得到b[1]=10值返回数组新赋值索引1,也就是a[1]=10
return a[1]+b[1]为20
作者: 杨剑    时间: 2013-3-3 16:21
public class Test {
public static int[] a=new int[]{1,2,3,4,5};
    public int foo(int[] b){//2.a的地址传递给b,使a和b同时指向同一个数组

    a[1]=b[2]+a[3]; //a[1]=3+4 为7
   b[1]=a[1]+a[2];  //b[1]=7+3 为10
     return a[1]+b[1];//因为a,b引用同一个数组,所以a[1],b[1]的值相等,都是10,所以返回20
    }
public static void main(String[] args) {
     System.out.println(new Test().foo(a));//1.创建一个Test类实例的时候把a作为参数传递给b
}
}
作者: amen0205    时间: 2013-3-3 19:13
因为 a  b都是指向同一个数组, 计算a[1]=b[2]+a[3];时  a[1]=3+4得7   ;计算 b[1]=a[1]+a[2];  时  b[1]=7+3得10,同时a[1]也变成10,所以结果是20




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2