为什么以下代码不会抛出IndexOutOfBoundsException,并打印出9 9 6?

时间:2011-07-28 14:11:22

标签: java indexoutofboundsexception

我是java的新手。我有一个疑问。

class ArrTest{ 
  public static void main(String args[])
{ 
    int   i = 0; 
    int[] a = {3,6}; 
    a[i] = i = 9; 
    System.out.println(i + " " + a[0] + " " + a[1]); // 9 9 6
  } 
} 

2 个答案:

答案 0 :(得分:8)

这是伟大的Java评估规则适用的另一个好例子。

Java从左到右解析地址。 a[i]这是a[0]的地址,然后是i的地址,然后将i分配给i,然后将9分配给a[0]

IndexOutOfBoundsException永远不会被抛出,因为a[0] 没有超出范围
 误解为a[9],这违反了从左到右规则

答案 1 :(得分:0)

不应该。

a [i] = i = 9(使i等于9) a [0]也应该是9,因为你给它分配了9(a [i] = i = 9),最初a [0]是3 并且a [1]是6(初始值(int [] a = {3,6};)

你应该得到9 9 6。

如果你做了[2]那么它会给你一个IndexOutOfBoundsException。