黑马程序员技术交流社区

标题: 面试题~求大神 [打印本页]

作者: lwy_ofb    时间: 2016-3-7 18:41
标题: 面试题~求大神
执行下面代码,i的输出结果是( )
   public static void main(String[] args) {
      int i = 3;
      for(int j = 0; j < 5;j++){
         i = i++;
      }
      System.out.println(i);

}

作者: Do、    时间: 2016-3-7 19:09
直接放在eclipse上运行以下不就行了吗
作者: cnm19921016    时间: 2016-3-7 19:57
i<5之后,直接执行i=i++,一轮后i加了一,,,答案8
作者: 365708064    时间: 2016-3-7 21:04
j从0开始到4,应该是循环5次,i之后输出为8
作者: 妖精的旋律    时间: 2016-3-7 21:14
i=3     注意这一句:   i = i++;
作者: a8256003    时间: 2016-3-7 21:15
88888888888888888888888
作者: sl943508135    时间: 2016-3-7 21:25
本帖最后由 sl943508135 于 2016-3-7 21:32 编辑

答案是3 等号后面的i先赋值给等号前面的i 再做自加运算

作者: 奋飞的小模糊    时间: 2016-3-7 22:02
i=3;原因是,/*
j=0,0<5,true,i=4,i=3,j=1
j=1,1<5,true,i=4,i=3,j=2
j=2,2<5,true,i=4,i=3,j=3
j=3,3<5,truei=4,i=3,j=4
j=4,4<5,truei=4,i=3,,j=5
j=5,5<5,false
*/
后++参与运算的步骤是:
1,自身先+1
2.把加一前的值进行运算
作者: 奋飞的小模糊    时间: 2016-3-7 22:07
奋飞的小模糊 发表于 2016-3-7 22:02
i=3;原因是,/*
j=0,0

根本原因是,++运算的优先级高于赋值运算的级别,先执行++,再执行赋值.
把第一次++的值覆盖掉了
作者: Vincent饭饭    时间: 2016-3-7 22:28
首先,这种写法是相当蛋疼的写法,开发时候千万别这样写。
i = i++;        
i = 0; i = i++  其实就是i自己和自己玩,永远都是先把0赋给自己。。轮不上i++...

注意:

i = i++和  i+=1是不一样的。
i= i++和
i = i ;
i++也是不一样的
作者: zk342577507    时间: 2016-3-7 23:35
答案应该还是3吧
作者: boboyuwu    时间: 2016-3-8 19:58
大神快过来做吧
作者: 15856681986    时间: 2016-3-8 20:05
3,老师讲过
作者: xanx14710    时间: 2016-3-8 20:09
运行结果是3
作者: luomoss    时间: 2016-3-8 21:00
输出当然是为3,i = i++;的操作可能相当于以下三步操作:①把变量i的值取出来,放在一个临时变量里(我们先记作temp);②把变量i的值进行自加操作;③把临时变量temp的值作为自增运算前i的值使用,在本题中就是给变量i赋值。因此,经过以上三步操作以后,虽然变量i在第②步操作中进行了自增运算,但第三步操作以后又把原来的值赋给了它




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2