首页 > 试题广场 >

下列代码的输出结果是_____ boolean b=true

[单选题]
下列代码的输出结果是_____
boolean b=true?false:true==true?false:true;
System.out.println(b);
  • true
  • false
  • null
  • 空字符串
推荐
==  优先级高于 三目运算符,先判断   true == true,此时返回为  true,
这时表达式为   boolean b = true?false:true?false:true
此时三目运算符从右向左执行,true?false:true,返回false
这时表达式为  boolean b = true?false:false;
结果为:boolean b = false ;
编辑于 2016-02-25 10:17:34 回复(27)
	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); 
测试了一下,后面似乎确实是没有执行的。
上面的代码输出为:
        a:true, i:1
        b:false, j:2
也就是说,当前面 a=true?true:++i==......成立时 后面的++i是没有执行的。而当 b=false?true:++j==......时,由于前面没有满足,所以才执行了后面的++j;
发表于 2016-02-20 12:50:16 回复(7)
AKG头像 AKG
谁能再解释一下??完全没懂。。
1403
发表于 2015-12-11 00:23:59 回复(0)
输出false啊。
条件表达式 [A]?b:c
若A成立true,则返回b,否则返回c
true?false:true == true?false:true
先判断第一个true结果true,返回第一个false,后面的不执行
编辑于 2016-02-25 10:15:54 回复(8)
根本不会执行后面的语句,由于boolean的特性,赋值为true即返回true,直接执行到?后面的false返回了!!!!!
发表于 2016-03-04 10:56:21 回复(0)
优先级问题和无聊的 i++,++i 问题,是最 TM 没用的题。
既不能提高你的编程水平,也不能说明你的编程能力。
请使用括号。谢谢。
发表于 2016-09-15 17:15:44 回复(36)
3
4
#include "stdio.h"
main(){
    print("Hello world!!!");
}
发表于 2021-05-18 17:24:07 回复(0)
类似于&&和||运算符,直接短路了,后面不会执行了吧

发表于 2019-11-18 11:23:17 回复(0)
个人理解
a?b:c?d:e 加上括号 a?b:(c?d:e) 
这是为了和(a?b:c)?d:e 进行区分,这个括号说明了后面c?d:e是一个整体,但不是说要从右边开始计算。
还是从a开始计算,如果进入b,则不会计算后面的内容,具有短路性质,不需要计算后面表达式中优先级比三目运算符高的内容。
发表于 2019-03-15 14:18:16 回复(0)
三目运算符是从右往左结合运算的,又搞错了
发表于 2017-09-02 09:58:57 回复(0)
这个式子具有短路性质,因为b=true直接返回false,后面一堆true==true?false:true可以不看没用
发表于 2017-08-27 16:04:53 回复(0)
 int j = 1;
 bool a=true?true:j=2?j=3:j=4;
 cout<<j<<endl;//output:j=1,前面满足时不执行后面
编辑于 2017-08-07 15:57:24 回复(0)
我觉的 这种面试题没什么意义 ! 像这种表达式应该加括号区分 别人在读你代码时还要慢慢想运算优先级,是你都烦吧
发表于 2016-11-18 11:00:16 回复(0)
我觉得这样的代码不推荐写吧
发表于 2016-08-17 10:15:55 回复(0)
false-true-false
发表于 2016-03-08 12:55:39 回复(0)
B,析:三目运算X?Y:Z,X是一个判断,ture则输出Y,false则输出Z
发表于 2015-12-17 21:13:12 回复(0)
booleanb=true?false:true==true?false:true;
true?false:(true==true)?false:true;
true?false:((true==true)?false:true);
false
发表于 2016-02-03 19:24:03 回复(15)
我觉得这道题考察的点就是一个三目运算符,并没有涉及到优先级的关系,首先分析一下题目



同样的问题换到 javaScript 中也类似,不过 javaScript 的 真是 非0、true、非null  假为 0、false 、null
所以题目又可以变成这样


以上只是我个人的见解,谢谢
编辑于 2016-12-19 14:33:53 回复(11)
我看了酒酒丶的答案,自己测了一下,发现前面的人似乎确实是错的。
下面这十行左右的引用是酒酒丶的答案
1
2
3
4
5
6
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:1
b:false, j:2
也就是说,当前面 a=true?true:++i==......成立时 后面的++i是没有执行的。而当 b=false?true:++j==......时,由于前面没有满足,所以才执行了后面的++j;
嗯,我看到这个是觉得很奇怪,我用方法来代替true/false,并以此观察运行顺序:

使用这种方式定义5个return true的方法,和return false的方法
	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;//用"()"括起来的
直接就是true,出来的就是false了,所以答案是false。

如果原题目是的第一个true改成false,运行顺序是:
(false)?false:true==true?false:true; //先执行第一个false,得到后面的表达式
(true==true)?false:true;//还是false,看到这里...为什么我做的时候会选到true呢?为什么呢?
嗯,就这样,但是三目运算符的优先级确实低于"==",但是呢,题目这里三目运算符似乎直接把式子看出整体了,导致题目变成了ture?false:(xxxxx)

如果有什么地方讲得不对,请指正。



编辑于 2020-06-28 21:57:10 回复(1)
我觉得应该是是这个样子的吧boolean b=true?false:true==true?false:true;,==运算符优先级高于=运算符,所以该表达式先执行==两边的即  第一步:((true==true)?false:true) 结果为false;第二步: true ? false :  false结果为false;第三步:b = false;
发表于 2016-05-04 10:51:54 回复(2)
==运算符优先级大于?:
?:运算符的结合性是从右向左
发表于 2016-02-28 21:15:26 回复(0)