首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么下面的代码不抛出IndexOutOfBoundsException,并打印出9 9 6?

为什么下面的代码不抛出IndexOutOfBoundsException,并打印出9 9 6?
EN

Stack Overflow用户
提问于 2011-07-28 22:11:22
回答 2查看 315关注 0票数 7

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

代码语言:javascript
复制
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
  } 
} 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-28 22:12:34

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

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

因为a[0]没有越界,所以IndexOutOfBoundsException永远不会被抛出。

误解是反对left-to-right-rulea[9]

票数 8
EN

Stack Overflow用户

发布于 2011-07-28 22:18:42

它不应该。

ai =i=9(使i等于9) a也应该是9,因为你给它赋值9 (ai =i= 9),最初a是3,a1是6(初始值(int[] a= {3,6};)

你应该得到9 9 6.

如果你使用a2,那么它会给你一个IndexOutOfBoundsException。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6860357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档