黑马程序员技术交流社区

标题: 三元运算符的嵌套问题 [打印本页]

作者: 打工人    时间: 2012-6-22 02:07
标题: 三元运算符的嵌套问题
本帖最后由 冯海霞 于 2012-6-22 09:51 编辑

刚才看到一个题目,感觉不明白了
int x=1,y=0;
System.out.println(x-->(y+x)?5:25>y++?'1':'2'); //运算过程是怎样的?
作者: 余银桂    时间: 2012-6-22 02:23
本帖最后由 余银桂 于 2012-6-22 02:33 编辑

优先级--,++最高;?:最低
该式子相当于 ((x--)>(y+x))?5  :  (25>(y++)?'1':'2')
然后自右向左看(先扫描一遍),y++和x--是指在该表达式中先使用x和y的值,再进行自加自减,此时表达式相当于(x>(y+x))?5  :  (25>y?'1':'2');y++;x--;
表达式结果就是 梅花符号  也就是( '1')了
作者: 闾丘日月    时间: 2012-6-22 02:27
这种题目最好不要纠结的好。毫无可读性的代码。不过是些运算符优先级,实际开发中这么写代码估计被骂死
作者: 打工人    时间: 2012-6-22 02:33
闾丘日月 发表于 2012-6-22 02:27
这种题目最好不要纠结的好。毫无可读性的代码。不过是些运算符优先级,实际开发中这么写代码估计被骂死 ...

我觉得,有些细节问题就是锻炼我们的思维的或者是考察我们的基础知识掌握程度,所以,实际开发不会出现的代码并不代表就是废代码,要弄懂原理
作者: 闾丘日月    时间: 2012-6-22 02:39
冯海霞 发表于 2012-6-22 02:33
我觉得,有些细节问题就是锻炼我们的思维的或者是考察我们的基础知识掌握程度,所以,实际开发不会出现的 ...

真正的基础知识是对内存中对象的清晰理解。而与所谓的优先级这种东西毫无关系,当然,你如果觉得重要我也懒得说了,反正如果我碰到这种题目先骂出题人,然后查文档解决。
作者: 打工人    时间: 2012-6-22 02:50
闾丘日月 发表于 2012-6-22 02:39
真正的基础知识是对内存中对象的清晰理解。而与所谓的优先级这种东西毫无关系,当然,你如果觉得重要我也 ...

骂不骂是你的事,让不让你过就是出题人的事情了
作者: 打工人    时间: 2012-6-22 02:57
余银桂 发表于 2012-6-22 02:23
优先级--,++最高;?:最低
该式子相当于 ((x--)>(y+x))?5  :  (25>(y++)?'1':'2')
然后自右向左看(先扫描 ...

你的结果不对,结果是5
作者: 孙飞    时间: 2012-6-22 07:43
冯海霞 发表于 2012-6-22 02:57
你的结果不对,结果是5

结果就是个梅花符号啊,你再试一下呗
作者: 朱志辉    时间: 2012-6-22 09:38
本帖最后由 朱志辉 于 2012-6-22 16:27 编辑

其实楼上和楼主结果不同在于1和2是单引号(字符,char)还是双引号(字符串,String)。结果都是5。只是char变成了输出ASCII值对应的符号——请求符。这个符号在控制台中的显示像梅花符号,在Eclipse中就是一个方框里面加一个问号。
  1. int x=1,y=0;
  2. int r = (int)x-->(y+x)?5:25>y++?'1':'2';
  3. System.out.println(r);
复制代码

作者: 打工人    时间: 2012-6-22 09:43
feigecal 发表于 2012-6-22 07:43
结果就是个梅花符号啊,你再试一下呗

恩呢,我的意思就是说,是5,然后因为自动提升所以会把5转换为字符型滴
作者: 打工人    时间: 2012-6-22 09:51
余银桂 发表于 2012-6-22 02:23
优先级--,++最高;?:最低
该式子相当于 ((x--)>(y+x))?5  :  (25>(y++)?'1':'2')
然后自右向左看(先扫描 ...

我明白这个顺序问题了,但是你的结果不对,我弄明白了,先算5后面的表达式,然后再整体算




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2