public class ArrayIndexValue {
   public static void main(String[] args) {
      int a = 0;
      int[] b = new int[3];
      int c = 3;
      b[a] = a = c;  //有本事,不要运行,能信心十足地告诉我答案,并说明理由。
   }
}

解决方案 »

  1.   

    琢磨这东西实用性不强
    不过还是忍不住Debug了一下,和预料的结果一样,于是多了一点自信。唉。
    据说绑定是从左到右,计算是从右到左。
      

  2.   

    j=i=3,这种语句系统的处理方式是:首先将整数3赋值给变量i,然后将(i=3)这部分内容转换成赋值表达式,这个表达式的值(运算结果)也是3,最后再将表达式(i=3)的值赋值给j,因此,此时变量j的值为3。
    这个或许能够帮助我们理解!
      

  3.   

    是三啊,你还没高清楚java运算顺序吧。
      

  4.   

    这不叫歧义,Java就没有歧义的代码,根本写不出来。这种代码叫垃圾
      

  5.   

    认同楼上!研究这些无疑给CSDN论坛增加数据
      

  6.   

    在优先级顺序中,[]是1级。
    b[a] = a = c;相当于 b[a] = ; a = c;
      

  7.   

    java运算符“=”运算顺序应该是自右向左吧,此时由于c=3,执行a=c时a=3,在执行b[a]=a时必出现IndexOutOfBoundsException
      

  8.   

       想了很久,由于运行了一下还是感觉矛盾,最后,通过decompile工具看了看编译后的代码,我感觉运行过程是这样的,首先载入数组元素,由于此时a=0此时载入数组b[0],同时载入变量,c,a并把变量c的值复制到a,再将值store,现在a=3,然后,在载入a的值,将结果store入b[0]。我又通过很多实验发现当在一个表达式上进行“=”操作时会将最右边变量的值保存的各个变量中,当表达式中有数组元素时数组元素的值是最后store.