有木有大佬能解释下为啥i++不会变,但是最后一张图变了
Iist[i]++; 等效于:
函数 {
int m = list[i];
list[i] = list[i] + 1;
return m;
}
++Iist[i]; 等效于:
函数 {
list[i] = list[i] + 1;
return list[i];
}
二者区别是:一个返回加 1 之前的值;一个返回 加1 之后的值。
你在代码中,list[i] ++ 或 s++ 只用到了 第一种情况。而第三次有所不同,是因为 第三次你用了2次 循环,在第一次循环时,各元素已经分别 +1 了。
跟for还是ForEach无关
你写两遍for也是第三张图的结果
这个就是值类型传递,就是会变啊
为啥第一个和第二个不会变,第三个会变
i++ 返回原来的值,++i 返回加1后的值。
i++不能用作左值,但++i可以。i++前者是先赋值,然后自行增加++i后者是先自增,然后赋值。
第三个会变,是因为第二次循环,list里的值都 已经++过了。
你看看下图的结果:
i++是调用一次后加1,第一个例子和第二个例子都是调用了一遍,并且是调用时 i 还没有加1,执行完后,变量都加了1了,只是没有再次打印,看不出来。
最后一个例子调用了两次,第一次调用后都加1了,第二次调用时效果就看出来了。
var i=1 console.write(i++) //1 console.write(++i) //2
++是自增运算符,console.write调用时如果++在右侧则先打印i,在调用i++.如果++在左侧则先调用++,在打印i就变成了2