以下是以前整理的笔记:
作为单独的语句:
i++;
++i;
没有区别,都是自增1,相当于 i=i+1;
------------
在表达式里使用,两者不同。
表达式里,i++ 就是 i, 不 自增, 先使用。退出 表达式 时 再 自增。
表达式里,++i 就是 i=i+1, 先自增1, 再使用。退出 表达式 时 不另自增。
例如:int i=2,a;
a = i++; a 为2
a = ++i; a 为3
出了表达式后,打印 i, 输出为 3
------
for(c=1;c<5;++c) {printf("%d",c); return 0;} 循环体里有 return 0; 所以只执行一次循环体就结束了。
!!!!!!!!!!!!!!!!!!
*但是:虽然执行结果没有区别,i++比++i更加expensive(效率低,占更多资源)。原因是:
++i :当程序执行到这里时,会直接把i的值增加1,然后继续进行将要进行的运算
i++ :当程序执行到此处时,会 (1)创建一个i的copy;(2)将i自增1;(3)返回原来i的copy到原语句中,copy的值被拿来继续参与运算
引发再思考的原因是想起++无论前置还是后置,优先级都比赋值=要高,那为什么 int a = i++ 之后 a 还是被赋予了i 的原值呢?
仔细想了一下发现其实道理很简单,其实就是一个返回值的问题:
public class Solution
{
public int i;
public int iPlusPlus(int i)
{
int iCopy = i;
i += 1;
this.i = i;
return iCopy; // return original value of i
}
public int PlusPlusi(int i)
{
i += 1;
this.i = i;
return i; // return current value of i
}
public static void main(String[] args)
{
Solution sol1 = new Solution();
Solution sol2 = new Solution();
int i = 1;
int result1 = 1 + sol1.iPlusPlus(i);
int result2 = 1 + sol2.PlusPlusi(i);
System.out.println("i++: " + "result = " + result1 + " i = " + sol1.i);
System.out.println("++i: " + "result = " + result2 + " i = " + sol2.i);
}
}
运行结果:
i++: result = 2 i = 2
++i: result = 3 i = 2
网友评论