本帖最后由 杨增坤 于 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
可能还有疏漏之处,希望积极讨论,共同进步。
|