JLS 15.13.1 does wonders for explaining these kinds of expressions:
* First, the array reference expression is evaluated. If this evaluation completes abruptly, then the array access completes abruptly for the same reason and the index expression is not evaluated.
* Otherwise, the index expression is evaluated. If this evaluation completes abruptly, then the array access completes abruptly for the same reason.
Thus the evaluation of what it is inside [] can not affect to the evaluation of the array reference expression, because this has happened before. But an assingment within [] is effective to the code that is at the right of where occurs:
That is why
System.out.println(a[(a=b)[3]] * a[1]);
prints the result of 14*1