A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 文密 中级黑马   /  2013-3-3 15:14  /  1584 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 文密 于 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??????????

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
//注意: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));
}
}

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个

查看全部评分

回复 使用道具 举报
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

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个

查看全部评分

回复 使用道具 举报
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
回复 使用道具 举报
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
}
}
回复 使用道具 举报
因为 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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马