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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 哈达洋 中级黑马   /  2014-10-11 22:21  /  838 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.           int n=1;
  6.                   System.out.println(2>1?'d':"abc");//结果为:d
  7.                   System.out.println(2>1?'d':1);//结果为:d
  8.                   System.out.println(2>1?'d':n);//结果为:100
  9.         }
  10. }
复制代码



对于第二行和第三行结果为什么会不同?第二行打印字符型,第三却打印了d的ascii值?

1 个回复

倒序浏览
(1)假如表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。
(2)假如一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。
(3)除以上情况外,假如表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型

根据上述结论可以看出,参考结论(2)char类型的取值范围为0-65535,在char取值范围中均会返回char类型的值,所以输出a。-1和65536超出了char的取值范围,所以类型提升为int型,输出a对应的ascii码。最后一条判断,已经明确了i为int类型,所以根据结论三,类型提升,输出结果97。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马