A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zybnqf520 中级黑马   /  2016-3-3 10:35  /  2507 人查看  /  34 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
      int i = 3;
      for(int j = 0; j < 5;j++){
         i = i++;
      }
      System.out.println(i);
}

34 个回复

倒序浏览
c语言输出的 却是8   是他们的运行机制 输出先后不同么。
回复 使用道具 举报
public static void main(String[] args) {
      int i = 3;                                         // i已经被赋值为3  i = 3
      for(int j = 0; j < 5;j++){                // for 循环语句  j 没有赋值的变量  循环语句 输出 false  循环结束
         i = i++;
      }
      System.out.println(i);               //直接输出 int  i = 3
}
回复 使用道具 举报
楼上的错了    首先建议楼主把i=i++中的i=去掉,再执行一次,就是8了,  至于为什么会出现i=3的情况,请看这个分析,很详细---http://blog.csdn.net/miderph84/article/details/3390166,怎么样  懂了吗?
回复 使用道具 举报
这样赋值还没试过呢~试试先
回复 使用道具 举报
这个问题好熟悉,但是我也不太明白
回复 使用道具 举报
  i = i++;
这式子底层运行是这样的
先右边的i的值预存(用于参与其他运算),再进行+1运算,把结果赋值给右边的i,
最后,
再把预存的i的值赋值给左边的i
回复 使用道具 举报 1 0
好像j都没有定义和赋值初始化呢,应该是i++吧,应该考察的是i的循环结构!
回复 使用道具 举报
留名等答案
回复 使用道具 举报
java和c的处理机制不同,java编译器在处理i++或i--的问题时,会分配一块内存空间存放初始值,循环结束后释放。i=i++在最后得到的仍然是i的初始值,为了得到 i 递增之后的值用i++即可。可以去网上查查,有详细的讲解。
回复 使用道具 举报
他们说的对
回复 使用道具 举报
i=i++在for循环里有效,当for执行完毕后,就会消失,因为for循环限定了i=i++的生命周期。所以i其实没变化,i=3
回复 使用道具 举报
留名等答案
回复 使用道具 举报
这是后++,右边的i赋值给左边的i在自增
回复 使用道具 举报
i=i++的执行顺序是i先自增1,然后再将自增之前的i赋值给自增之后的i,所以等于没变
回复 使用道具 举报
为什么是3呢
回复 使用道具 举报
应该是7才对吧
回复 使用道具 举报
因为i的值一直没有变化过!!!可以用debug运行查看
回复 使用道具 举报
看到上面的答案,表示还是很迷糊。求大神详解
回复 使用道具 举报
如果你对于++运算比较理解的话  class Test {
        public static void main(String[] args) {
                int i = 3;
                i = i++;        //1 i结果为3
                i = i++;        //2  i结果为3
                i = i++;        //3  i结果为3
                i = i++;        //4  i结果为3
                i = i++;        //5  i结果为3
               
                System.out.println(i);   //最后结果还是为3
        }
}   
这样可能有利于你的理解

点评

66666  发表于 2016-3-12 14:02
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马