黑马程序员技术交流社区

标题: 关于三元运算符和强制转换 [打印本页]

作者: java冬冬    时间: 2013-4-18 13:48
标题: 关于三元运算符和强制转换
本帖最后由 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???
作者: 先小涛    时间: 2013-4-18 15:36
本帖最后由 先小涛 于 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. }
复制代码

作者: 彭雨贤    时间: 2013-4-18 15:43
我觉得是这样的。虽然(char)对x-10+'A'进行了强制转换,但是由于后面的x是int型,在三元运算符进行运算时,x-10+'A'的类型被自动提升为int型。
作者: 沈浩    时间: 2013-4-18 16:06
本帖最后由 沈浩 于 2013-4-18 16:07 编辑

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

多谢多谢{:soso_e152:}
作者: java冬冬    时间: 2013-4-18 16:30
彭雨贤 发表于 2013-4-18 15:43
我觉得是这样的。虽然(char)对x-10+'A'进行了强制转换,但是由于后面的x是int型,在三元运算符进行运算时, ...

多谢多谢{:soso_e152:}
作者: java冬冬    时间: 2013-4-18 16:31
沈浩 发表于 2013-4-18 16:06
因为三元运算符  运算完肯定有结果  结果的数据类型要一致  如果不一致小的会自动向大的进行类型提升
可以 ...

多谢多谢{:soso_e152:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2