这是在vc和eclipse里做的实验,同样的表达式,得出不一样的结果,输出差异:c 根本没有输出,但是java每运行一次就输出一次loop?有哪位知道原理的吗?
#include <stdio.h>void main(){        int b=1;        while(++b>0)
                        
                        ;
          
        printf("看你输出不");}c里面什么都不做就只占系统的资源,什么也不输出。public static void main(String[] args) {
                // TODO Auto-generated method stub                int b=1;
                while(++b>0)
                        
                        ;
                        
                        System.out.println("loop?");
                        
                
                
                
        
        }java里面还输出一次loop? 什么原因?

解决方案 »

  1.   

    是不是因为JVM优化了那个while循环,最后一次输出是while循环走过后走到下面了
      

  2.   

    vc里面最后打印的结果(我多加了一行,打印b-1和b):
    2147483647,-2147483648
    看你输出不

    eclipse里面最后打印的结果(我多加了一行,打印b-1和b):
    2147483647,-2147483648
    loop

    原因是,b是int型的,++b到b的最大值后发生了溢出(2147483647->,-2147483648),所以循环就结束了,因此就打印出了上面的结果。
      

  3.   

    编译器不一样,所以两边的代码未必等效。
    从理论上来说,应该是发生5L说的情况,难道你的vc环境有问题?
      

  4.   

    应该是int不断的自增,然后溢出了,跳出了whhile循环。
    你那while(true)就可以了。
      

  5.   

    5L正解 有结果的  是不是跟 8楼说的那样 自增溢出所以结束循环 接着输出printf语句?
      

  6.   


    输出很慢,cmd下等了一会才有结果
      

  7.   

    就是这个原因,b不断自加,最后超过了int范围,变为负数,所以while循环结束,最后执行while以后的代码,即程序中的打印语句。