以前我一直认为i++是返回对i的值加1,而++i是先返回i的值再对i加1,结果在java中测试
int i=6;
System.out.println("i is "+(i++));
System.out.println("i is "+i);
结果是:
i is 6
i is 7
以前我一直以为这样才能出现上面的运行结果
System.out.println("i is "+(++i));
System.out.println("i is "+i);
还有发现打印输出时候Java的编译方式和C的编译方式不一样,java是从左边到右边,而C是从右边到左边如Java运行代码以下代码:
i=6;
System.out.println("result is "+(++i)+" "+(++i)+" "+i);
运行结果是:
result is 7 8 8
个人觉得先做++i,++i,iC语言中运行以下命令
i=6;
println("result is %d %d %d",(++i),(++i),i);
运行结果是:
result is 8 7 6
编译顺序是i,++i,++i,只是显示的时候还是从左到右边显示,写了这么多年的程序从来没有注意到这个问题,感觉惭愧和汗颜!

解决方案 »

  1.   

    System.out.println("i is "+(i++));
    System.out.println("i is "+i);
    结果是:
    i is 6
    i is 7
    -------------------
    一直这样认为
      

  2.   

    楼主记反了怎么写for循环的呵?
      

  3.   

    果然很强,估计在写for的时候就debug,发现不对就把MAX_VALUE +1 或者-1
      

  4.   

    Java的可以理解,我之前都是这么认为的,可C语言的就万万没想到,看来楼主还挺细心!!
    C语言中运行以下命令
    i=6;
    println("result is %d %d %d",(++i),(++i),i);
    运行结果是:
    result is 8 7 6//之前以为是 7 8 8
      

  5.   

    楼主是很细心...不过我认为要想真正了解这个现象的原理不能只从语句表面的运行结果加上一定的逻辑推理来得出结论,有可能楼主得到的结果在此帖所谈及的上下文中是成立的,而在其它的时候就不一样了.因此建议楼主应该从C语言的编译器和JAVA虚拟机的内部处理机制来说明这个问题.因为毕竟C语言是一个面向过程的语言而JAVA是一个完全面向对象的语言,它们的处理方式是肯定有差异的,要了解它们在处理表达式和函数/方法时是怎样进行堆栈处理的.只能这样才能让楼主的结论更加有说服力,当然也能了解更多的东西...
      

  6.   

    int i = 5;
    //cout<< i++ <<"  "<<i++<<"  "<<i<<endl;   //the result is   6  5  5
     cout<< ++i<<"  "<<++i<<"  "<< i<<endl;    //the result is  7  6  5c++也是从右到左编译的...
      

  7.   

    开始看了不怎么相信 
    刚试了一下  一样的代码
    有心人啊 
    我也错了一年了
    C下printf("result is %d %d %d",(++i),(++i),i);
    结果是8 7 6
    JAVA下System.out.println("result is "+(++i)+" "+(++i)+" "+i);
    是 7 8 8
      

  8.   

    C下printf("result is %d %d %d",(++i),(++i),i);一直没发现这个问题谢了。
      

  9.   

    Java运行代码以下代码:
    i=6;
    System.out.println("result is "+(++i)+" "+(++i)+" "+i);
    运行结果是:
    result is 7 8 8
    个人觉得先做++i,++i,iC语言中运行以下命令
    i=6;
    println("result is %d %d %d",(++i),(++i),i);
    运行结果是:
    result is 8 7 6
    编译顺序是i,++i,++i,只是显示的时候还是从左到右边显示,写了这么多年的程序从来没有注意到这个问题,感觉惭愧和汗颜!
    ----------------------------------------不会吧,这么初级的问题C 语言里面,函数参数入栈的顺序是从右到左入。所以:println("result is %d %d %d",(++i),(++i),i);是先计算 i, 然后第一个 ++i, 最后第二个 ++i结果,i = 8,i = 7,i =6而输出时按从左到右来输出,于是就变成 8 7 6 了