黑马程序员技术交流社区

标题: 静态变量做参数的问题 [打印本页]

作者: 程旦    时间: 2012-3-20 10:44
标题: 静态变量做参数的问题
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));

         }

        }
大家看看这题的结果是什么啊。。。是一个公司的笔试题哦
作者: 马云    时间: 2012-3-20 10:48
17对不对 啊
作者: 马云    时间: 2012-3-20 10:50
是二十啊
作者: 尹震    时间: 2012-3-20 11:02
答案:20
数组对象a和数组对象b指向同一个数组。

作者: ♂诸侯♂    时间: 2012-3-20 12:19
答案20
a[1]=b[2]+a[3];
//b[2]=3,a[3]=4  。这一个运行完之后。a[1]= 7
            b[1]=a[1]+a[2];
//a[1]=7,a[2]=3。这一行运行完之后,b[1] =10.  a[1]=b[1]=10              
                   return a[1]+b[1];
//return a[1]+b[1]=10+10=20
作者: 陈从宾    时间: 2012-3-20 12:58
该题目中的a与b都是数组int[]{1,2,3,4,5}的引用,数组在内存中只有一份,无论是对a操作还是对b操作,其实质均是对内存中{1,2,3,4,5}的操作
作者: 李飞    时间: 2012-3-20 14:26
结果20

a[1]=b[2]+a[3];a[1]=a[2]+a[3]——>a[1]=7;a={1,7,3,4,5};这个时候的"b"数组为{1,7,3,4,5};
b[1]=a[1]+a[2];a[1]=a[1]+a[2]——>a[1]=10;a={1,10,3,4,5};这个时候的"b"数组为={1,10,3,4,5};
a[1]+b[1]=10+10=20;
这个感觉考的就是对同一个对象引用的操作

我们把这个题目改一下,主函数中的a改为new int[]{1,2,3,4,5};
结果就是17了
a[1]=b[2]+a[3];a[1]=3+4——>a[1]=7;a={1,7,3,4,5};这个时候传进来的b没有改变还是{1,2,3,4,5};
b[1]=a[1]+a[2];b[1]=a[1]+a[2]——>b[1]=10;a={1,7,3,4,5};这个时候传进来的b={1,10,3,4,5};
a[1]+b[1]=7+10=17;
这个时候数组a和数组b之间没有什么联系,只不过是数组中的元素相同而已





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