黑马程序员技术交流社区
标题:
数组的一个程序问题
[打印本页]
作者:
liqian
时间:
2012-4-20 17:39
标题:
数组的一个程序问题
public class A
{
public static void main(String args[])
{
int[] a={11,12,13,14};
int[] b={0,1,2,3};
System.out.println(a[(a=b)[3]]);//这行什么意思?请讲详细点,谢谢.
System.out.println(a[2]);
}
}
复制代码
运行结果是什么呢
作者:
胡文杰
时间:
2012-4-20 18:24
运行结果应该是14 2 a[(a=b)[3]] 也可以写成 a[b[3]] 这一句话执行完那个 数组a被赋值成数组 b
作者:
索学超
时间:
2012-4-20 18:25
运行结果是:
14
2
a[(a=b)[3]] 的意思是先获取数组b中下标为3的值,然后将b数组赋给a
当执行到a[ ]的时候相当于把a数组复制了一份拿了过来 所以在执行(a=b)的赋值时改变的是原来a的数组
所以第一个打印出来的是原a数组中下标为3 也就是b数组中下标为3的那个对应的数字在a数组中的值
在第二次打印的时候就是改变后的值了
作者:
张超超
时间:
2012-4-20 18:29
这个你一点点分析就会看懂了:
关键是:(a[(a=b)[3]]);
首先a=b是将数组b的引用赋给a,此时a就指向了b,即为b[b[3]],而里面的b[3]就是值3,此时就为b[3],结果还是3
而下面的a[2]即为b[2]结果为2。
希望对你有帮助。
作者:
岳民喜
时间:
2012-4-20 18:43
本帖最后由 岳民喜 于 2012-4-20 18:50 编辑
胡文杰 发表于 2012-4-20 18:24
运行结果应该是14 2 a[(a=b)[3]] 也可以写成 a] 这一句话执行完那个 数组a被赋值成数组 b ...
这么写不对,a[b[3]]这种写法的意思是把 b[3]的值作为a数组的角标,相当于是a[3],结果是14,但a数组的值并没有被替换成b,还是原来的数组,而a[(a=b)[3]]有一个赋值过程。先实行a[b[3]],再执行a=b;
楼主把那句改成 System.out.println(b[(b=a)[3]]); 就能知道执行顺序了,会报角标越界的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2