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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liqian 中级黑马   /  2012-4-20 17:39  /  2451 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class A
  2. {
  3. public static void main(String args[])
  4. {
  5. int[] a={11,12,13,14};
  6. int[] b={0,1,2,3};
  7. System.out.println(a[(a=b)[3]]);//这行什么意思?请讲详细点,谢谢.
  8. System.out.println(a[2]);
  9. }
  10. }
复制代码
运行结果是什么呢

4 个回复

倒序浏览
运行结果应该是14   2     a[(a=b)[3]]   也可以写成  a[b[3]]     这一句话执行完那个 数组a被赋值成数组 b
回复 使用道具 举报
运行结果是:
14
2

a[(a=b)[3]]  的意思是先获取数组b中下标为3的值,然后将b数组赋给a  

当执行到a[   ]的时候相当于把a数组复制了一份拿了过来   所以在执行(a=b)的赋值时改变的是原来a的数组
所以第一个打印出来的是原a数组中下标为3   也就是b数组中下标为3的那个对应的数字在a数组中的值
在第二次打印的时候就是改变后的值了
回复 使用道具 举报
这个你一点点分析就会看懂了:

关键是:(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: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]]);    就能知道执行顺序了,会报角标越界的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马