这个就是前加后加的问题了,看上去就那么一句话。++在前先加在运行。在后面的先运算在加!
我想问问下面这个程序:
 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

解决方案 »

  1.   


    你那样看是看不出来的,要像我这样看。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!");
    }
    }
      

  2.   

    i++,整个表达式取旧值
    ++i,整个表达式取新值
    什么叫表达式的值?
    j=i++,j=++i,这是把表达式的值赋给j,这个时候就有区别
    function(i++),function(++i),这是用表达式的值作为函数的参数,这个有区别
    你单独一句i++;没有任何别的东西来调用它的值,这个值就没有意义
    就是说,单独的一句i++和++i,是没有任何区别的(运行速度有区别),都等价于i=i+1
    你说的i<5,那都已经是下一个语句了,你干脆等程序运行完再把那个1加上好了
      

  3.   


    for(int i = 0;i < 5;i++){
      语句;
    }这个程序是这样执行的,首先判断i是否满足i < 5; 如果满足,则执行"语句";然后执行i++,然后继续判断是否满足i < 5;如果满足,则执行"语句"...当i == 4的时候 再次i++; 之后再次判断i < 5; 这时显然不成立,然后不执行"语句";程序结束。程序最后输出的是4 而i的值是5.楼主试想,照这种思路,i++与++i是不是一样的呢?
      

  4.   

    看来lz首先得理解下 for(;;) 语句中三个表达式的执行顺序了... 
      

  5.   

    这种教LZ一个方法来做试验 设置断点再debug运行 然后看i值的变化 还可以弄清for的执行顺序~
      

  6.   


    for (int i = 1; i < 5;) {
    System.out.println(++i);
    } for (int i = 1; i < 5;) {
    System.out.println(i++);
    }这样就能看出区别了。
      

  7.   

    楼主应该是纠结这个知识点吧!还有for循环的执行顺序的问题 for(int i = 1 ; i++ < 5 ;){
    System.out.println(i);
    }

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

  8.   

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

  9.   

    在for循环中可以分为四个部分
    for(int i=0;i<5;i++)
    {
    }
    int i=0;为第一条语句
    接着判断 i<5;
    如果为true
    进入循环体
    在循环体结束后
    进行自加运算
    就是i++;
    然后再次判断 i<5;
    进入循环
    所以在for循环中,是多条语句的集合体
    而“;”确实是可以表示一个语句的结束