A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 打工人 金牌黑马   /  2012-6-22 02:07  /  3879 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯海霞 于 2012-6-22 09:51 编辑

刚才看到一个题目,感觉不明白了
int x=1,y=0;
System.out.println(x-->(y+x)?5:25>y++?'1':'2'); //运算过程是怎样的?

10 个回复

倒序浏览
本帖最后由 余银桂 于 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')了

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这种题目最好不要纠结的好。毫无可读性的代码。不过是些运算符优先级,实际开发中这么写代码估计被骂死
回复 使用道具 举报
闾丘日月 发表于 2012-6-22 02:27
这种题目最好不要纠结的好。毫无可读性的代码。不过是些运算符优先级,实际开发中这么写代码估计被骂死 ...

我觉得,有些细节问题就是锻炼我们的思维的或者是考察我们的基础知识掌握程度,所以,实际开发不会出现的代码并不代表就是废代码,要弄懂原理
回复 使用道具 举报
冯海霞 发表于 2012-6-22 02:33
我觉得,有些细节问题就是锻炼我们的思维的或者是考察我们的基础知识掌握程度,所以,实际开发不会出现的 ...

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

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

你的结果不对,结果是5
回复 使用道具 举报
孙飞 中级黑马 2012-6-22 07:43:23
8#
冯海霞 发表于 2012-6-22 02:57
你的结果不对,结果是5

结果就是个梅花符号啊,你再试一下呗
回复 使用道具 举报
本帖最后由 朱志辉 于 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);
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1

查看全部评分

回复 使用道具 举报
feigecal 发表于 2012-6-22 07:43
结果就是个梅花符号啊,你再试一下呗

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

我明白这个顺序问题了,但是你的结果不对,我弄明白了,先算5后面的表达式,然后再整体算
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马