请看如下代:public class TestTernary {
public static void test(){
int i = 1;
int j = 1;

boolean a = true?true:++i==2?false:true;
System.out.println("a:"+a+", i:"+i);

boolean b = false?true : ++j==2?false:true;
System.out.println("b:"+b+", j:"+j);
}
public static void main(String[] args){
test();
}
}

运行结果如下:
a:true, i:1
b:false, j:2疑惑是这样啊,之前没有怎么考虑运算符优先级问题时,这道题很容易理解,但考虑到优先级时,出现疑惑了。
“++”优先级高于“==”高于 三目运算符。那么对于a的表达式,如果严格按照运算符优先级来计算,应该先计算(++i)在计算(++i==2),然后再计算三目运算。那么结果中i应该为2.   但,事实上,是先判断a=true,为真,直接返回true,后面的++i==2?false:true并没有计算了,所以i=1,,,那这样看是三目运算符的优先级高于“++”和“==”。
我想肯定是我哪里理解错了,希望大神给讲解一下

解决方案 »

  1.   

    在这里++i,++j是属于三目运算中的,不是与三目运算平级的.单独看++j==2?false:true;不就说明++大于三目.
      

  2.   

    首先代码不要这样写. 其次代码不要这样写.你把问题复杂化了 . 其实就是
            boolean a = true?true:true?false:true;
            boolean b = false?true:true?false:true;如果你用idea的话都会自动帮你简化的.其实原理上应该比较像一个递归的过程吧