日期:2014-05-20  浏览次数:20691 次

i++ 和++i
这个就是前加后加的问题了,看上去就那么一句话。++在前先加在运行。在后面的先运算在加!
我想问问下面这个程序:
 for(int i=1;i<5;++i){
 System.out.println(i);
 }

 for(int i=1;i<5;i++){
 System.out.println(i);
 }
为什么输出会是一样的。这样的话第二个循环这个i不也要先参与运行才自己加加的么?
如果按照县取值在自己加加的话 第二个循环应该输出1--5才对。
首先,i=1 条件成立,输出1,然后到i++这里,先取值,i还是1,1<5,又成立,所以输出i,但是i在取值后会++所以i是2.如此推下去会输出1--5.
求解释,不懂啊.....
到底该怎么理解呢?
for循环??? i++ ++i

------解决方案--------------------

你那样看是看不出来的,要像我这样看。



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

System.out.println("Hello World!");
}
}


------解决方案--------------------
i++,整个表达式取旧值
++i,整个表达式取新值
什么叫表达式的值?
j=i++,j=++i,这是把表达式的值赋给j,这个时候就有区别
function(i++),function(++i),这是用表达式的值作为函数的参数,这个有区别
你单独一句i++;没有任何别的东西来调用它的值,这个值就没有意义
就是说,单独的一句i++和++i,是没有任何区别的(运行速度有区别),都等价于i=i+1
你说的i<5,那都已经是下一个语句了,你干脆等程序运行完再把那个1加上好了
------解决方案--------------------
这种教LZ一个方法来做试验 设置断点再debug运行 然后看i值的变化 还可以弄清for的执行顺序~
------解决方案--------------------

for (int i = 1; i < 5;) {
System.out.println(++i);
}

for (int i = 1; i < 5;) {
System.out.println(i++);
}

这样就能看出区别了。
------解决方案--------------------
i++  和   ++i
一个是先运算再自加
一个是先自加再运算
这里的两种方法均是在同一条语句中执行的
而楼主提出的问题在与不了解自加和运算的位置
代码中给出的问题中
无论使用哪种方式,都不影响判断语句 i<5;
就是说,在执行 i<5;时,所谓的"运算"和"自加"都已经结束
因为他们根本就并不是在同一条语句中
所以运行结果就一样了