public static void main(String[] args) {
        int m = 5, n = 5;
        if((m != 5) && (n++ == 5)){}
        System.out.println("a." + n);
        
        m = n = 5;
        if((m != 5) & (n++ == 6)){}
        System.out.println("b." + n);
//        System.out.println("b." + m);
        m = n = 5;
        if((m == 5) || (n++ == 5)){}
        System.out.println("c." + n);
//        System.out.println("c." + m);
        m = n = 5;
        if((m == 5) | (n++ == 6)){}
        System.out.println("d." + n);
//        System.out.println("d." + m);
    }(环境eclipse)
我在csdn上看到了这个程序
无意的运行了一下
发现一个很奇怪的问题
如果直接运行
结果是
a.5
b.6
c.5
d.6
如果是单步调试
则结果是五花八门
好像还和调试的速度有关
我在别的机器上运行,不会出现这样的现象。唯独我这一台机器
这个事情本来是去年过年前的事情
原本想可能是编译器的问题,说不定年后好了,没想到这过了年还是一样?

解决方案 »

  1.   

    && 和 || 会执行短路策略,&和| 不会
      

  2.   

    单步测试也是
    a.5
    b.6
    c.5
    d.6
      

  3.   

    我也不知道怎么回事
    我单步调试的结果是:
    a.10 
    b.9 
    c.5 
    d.6 
    或者
    a.11
    b.10 
    c.5 
    d.6 
    一般来说后两个不会变
    前两个总是在变
    如果运行的话没问题的
      

  4.   

    不知道为什么
    但不调试的时候
    a.5 
    b.6 
    c.5 
    d.6
    这个结果有时变为
    a.11 
    b.10 
    c.5 
    d.6
    或者
    a.10 
    b.9
    c.5 
    d.6
    一般来说后两个比较稳定
    不过比较奇怪的是
    我刚刚把这些代码重新敲了一遍
    好像又没问题啦莫名其妙难道真的是灵异事件不会阿出现这些问题
    我同事都看见了oh mod!
      

  5.   

    a.5
    a.5
    b.6
    b.5
    c.5
    c.5
    d.6
    d.5
    正常吧