public class Demo{
    public static void main(String[] args){
int i=1;
int j=1;
if(i++ < 0 && (++j >0 || true)){}
   
System.out.println(i);
System.out.println(j);
    }
}打印结果为什么是 2,1
这么说(++j >0 || true) 根本没执行 可是()不是比 && 优先级高吗?
很迷途的一个问题,请高手指教,谢谢!!

解决方案 »

  1.   

    因为i++ < 0为否  所以不会往后匹配了  因为&&只有左右都为真的时候才为真啊不像&会两边都去匹配  &&的左边为否  就停止匹配了
      

  2.   

    这个我知道,但是按照优先级 应该先运算(++j >0 || true) 这个()呀。
    这样 j==2了吧。
    难道 && 不管优先级 一切从左到右运算。
      

  3.   


      楼上的真确   public class demo{
        public static void main(String aa[]){
    int i=1;
    int j=1;
    if(i++>0 && (++j>0)==true) {
             System.out.println(i);
                System.out.println(j);
            }else{
                System.out.println("false");
            }
        }
    }  你把程序写成这样就容易理解了
      

  4.   

    你应该这样来理解:
    ((表达式1)&&(表达式2))
    先算表达式1,为真再算表达式2!
      

  5.   

    楼主在&&右边加的括号是只是改变了++j>0的结合项,&&永远都是先算左边后算右边,和加不加括号没关系.
      

  6.   

    正解!
    只要&&左边为真是那么就停止了!所以&&右边是不会在执行了!楼上正确,多写括号!
      

  7.   

    断路
    从左向右计算
    在第一次判断为false的地方断开,放弃右边所有操作