++i和i++的区别?

        for (int i = 0; i < 5 ; i++) {
            System.out.println(i);
        }
        
        for (int i = 0; i < 5 ; ++i) {
            System.out.println(i);
        }
        下面这个循环中++i不是应该先赋值后运算么,也就是第一次进来就已经i=1了,为什么两个循环输出都是0,1,2,3,4,5?
阅读 6k
7 个回答

兄弟啊,你这个问题和++i或i++没关系啊,你没有搞明白for循环是怎么执行的,for有三个表达式,第一个初始表达式,首次进for循环时候执行的,只会执行一次,第二个表达式是条件表达式,每次循环前先进行评估,如果为true则执行循环体,第三个表达式是循环体执行完之后再对该表达式求值。
所以i++和++i在这里对结果没有任何影响。

翻译成while语句如下:

int i = 0;
while(i < 5) {
     System.out.println(i);
     i++;
     //++i; 这是第二种
}

i++ 和 ++i,只有嵌入到表达式中才有区别,单独拧出来是没有区别

说说他们在表达式中的值
i++ ++i 都是表达式,一般表达式也有具体的值
比如

int i = 1;
printf("%d" , i++); // 这里就是输出表达式的值  1
printf("%d" , ++i); // 这里就是输出表达式的值  2

区别来了,i++, 表达式先取i的值, i再加1
++i i先加1,表达式再去i的值

这个问题源于你对for循环本身的不解,下面我们来看看她是如何被解释并执行的

Image

注意我选中的部分,现在还有疑问么?

我来说一下吧

i++等于return i; i=i+1;
++i等于i=i+1; return i;

图片描述

明明是0 1 2 3 4 ,怎么可能执行出5来呢?

// 风格A
for(int i = 0; i < n; i++)
{
    // in for
}

// 风格B
for(int i = 0; i < n; ++i)
{
    // in for
}

两种风格的for循环功能是完全一样的,你会发现首先执行的是第一句i = 0;,然后执行循环体内的语句,执行完毕后再对i自增。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题