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