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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨增坤 于 2013-9-23 16:38 编辑

看老师的视频,又百度了一些资料,亲自代码验证了下。
现将结果发布如下,一起讨论,代码就写简化的了。
int y=0,x=1;
y = (x>0)?'a':200;
y打印结果为97,我看到很多人的解释是a为char类型,200默认为Int类型,
所以'a'被提升为Int类型,所以打印97.

事实上,这个结论是错误的,也是视频中的一个小bug吧。
如果你这时候直接打印System.out.println((x>0)?'a':200);得到的结果则是a而非97,
a的类型提升是发生在给y赋值的时候而不是之前。

随题附上关于三目运算符的表达式类型提升规则:(条件表达式)?表达式1:表达式2;
1.如果表达式1和表达式2类型一致,则他就是结果类型;
2.如果表达式1为char、byte、short类型的其中一个,而另一个表达式为Int类型的数据常量,
  并且可以用表达式1的三种类型表示,那么结果类型就是三种类型的其中一种。
3.如果不满足以上二者,则会发生类型提升,结果类型就是提升后的类型。

此时,观看上述代码(x>0)?'a':200;
200为int常量,’a'为char类型,符合第二种情况,所以此时结果类型为char类型,而非97

可能还有疏漏之处,希望积极讨论,共同进步。



评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 酱爆 于 2013-9-23 11:41 编辑

好吧,我懂了,你应该这样写会比较清楚,  System.out.println(x>1)?'a':200;  这时候200是一个char类型
回复 使用道具 举报
酱爆 发表于 2013-9-23 11:28
好吧,我懂了,你应该这样写会比较清楚,  System.out.println(x>1)?'a':200;  这时候200是一个char类型 ...

知其所以然最重要,^_^,一法通则万法通。
回复 使用道具 举报
酱爆 发表于 2013-9-23 11:28
好吧,我懂了,你应该这样写会比较清楚,  System.out.println(x>1)?'a':200;  这时候200是一个char类型 ...

我怎么觉得a是char,没赋值的200是int?
回复 使用道具 举报
doitforyou 来自手机 高级黑马 2013-9-23 16:33:57
报纸
橴蝶飛雨 发表于 2013-9-23 16:31
我怎么觉得a是char,没赋值的200是int?

可以代码验证,此时都是char类型
回复 使用道具 举报
如果问题已经解决,请重新编辑帖子,修改帖子的主题分类为“已解决”{:soso_e181:}
回复 使用道具 举报
doitforyou 发表于 2013-9-23 16:33
可以代码验证,此时都是char类型

奇怪,为什么当改变条件打印第二个值的时候显示是文号?
回复 使用道具 举报
橴蝶飛雨 发表于 2013-9-23 20:30
奇怪,为什么当改变条件打印第二个值的时候显示是文号?

打印问号因为在编码表中这个编码这个数字对应的编码不存在,会有很多问号的。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马