下列代码的输出结果是_____
boolean b=true?false:true==true?false:true; System.out.println(b);
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);
123456 inti = 1;intj = 1;booleana=true?true:++i==2?false:true;System.out.println("a:"+a+", i:"+i);booleanb=false?true:++j==2?false:true;System.out.println("b:"+b+", j:"+j);测试了一下,后面似乎确实是没有执行的。上面的代码输出为:a:true, i:1b:false, j:2也就是说,当前面 a=true?true:++i==......成立时 后面的++i是没有执行的。而当 b=false?true:++j==......时,由于前面没有满足,所以才执行了后面的++j;
static boolean returnTrue1(){ System.out.println("true1"); return true; } static boolean returnTrue2(){ System.out.println("true2"); return true; }
boolean c=returnTrue1()?returnTrue2():returnTrue3()==returnTrue4()?returnFalse1():returnTrue5(); System.out.println("c:"+c); System.out.println("--------------"); boolean e=returnFalse1()?returnTrue2():returnTrue3()==returnTrue4()?returnFalse2():returnTrue5(); System.out.println("e:"+e);
true1 true2 c:true -------------- false1 true3 true4 false2 e:false仔细看看吧。如果换做原题目,那么实际的运行顺序是:
(true)?false:true==true?false:true;//用"()"括起来的
(false)?false:true==true?false:true; //先执行第一个false,得到后面的表达式 (true==true)?false:true;//还是false,看到这里...为什么我做的时候会选到true呢?为什么呢?嗯,就这样,但是三目运算符的优先级确实低于"==",但是呢,题目这里三目运算符似乎直接把式子看出整体了,导致题目变成了ture?false:(xxxxx)