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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java冬冬 高级黑马   /  2013-4-18 13:48  /  1489 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 java冬冬 于 2013-4-18 16:28 编辑
  1. class A
  2. {
  3.        public static void main(String[] args)
  4.        {
  5.              int x=10;
  6.              System.out.println((char)(x-10+'A'));
  7.              System.out.println(x>9?(char)(x-10+'A'):x);
  8.         }
  9. }
复制代码
结果为

为什么第二个输出的是65而不是A???

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 先小涛 于 2013-4-18 15:37 编辑

这里面有一个隐含的类型自动提升原则,就是将char类型提升为整型,你再运行我的代码,比较一下就知道了
  1. public class Test {
  2.         public static void main(String[] args)
  3.         {
  4.                 int x=10;
  5.                 System.out.println((char)(x-10+'A'));
  6.                 System.out.println(x>9?(char)(x-10+'A'):x);//char和int,则提升为int,所以打印为65,而不是A
  7.                 System.out.println(x>9?(char)(x-10+'A'):(char)x);//都是char,故不提升,所以打印为A,而不是65
  8.                 System.out.println(x>9?1:2.0);//int和double,故提升为double,所以打印为1.0,而不是int型的1
  9.         }
  10. }
复制代码
回复 使用道具 举报
我觉得是这样的。虽然(char)对x-10+'A'进行了强制转换,但是由于后面的x是int型,在三元运算符进行运算时,x-10+'A'的类型被自动提升为int型。
回复 使用道具 举报
本帖最后由 沈浩 于 2013-4-18 16:07 编辑

因为三元运算符  运算完肯定有结果  结果的数据类型要一致  如果不一致小的会自动向大的进行类型提升
可以这样想如果要得到运算完的结果   该用什么类型来接收  因此结果类型要一致    不然就报错
回复 使用道具 举报
先小涛 发表于 2013-4-18 15:36
这里面有一个隐含的类型自动提升原则,就是将char类型提升为整型,你再运行我的代码,比较一下就知道了 ...

多谢多谢{:soso_e152:}
回复 使用道具 举报
彭雨贤 发表于 2013-4-18 15:43
我觉得是这样的。虽然(char)对x-10+'A'进行了强制转换,但是由于后面的x是int型,在三元运算符进行运算时, ...

多谢多谢{:soso_e152:}
回复 使用道具 举报
沈浩 发表于 2013-4-18 16:06
因为三元运算符  运算完肯定有结果  结果的数据类型要一致  如果不一致小的会自动向大的进行类型提升
可以 ...

多谢多谢{:soso_e152:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马