黑马程序员技术交流社区

标题: 不理解,请大神解释解释~~ [打印本页]

作者: Ansel_young    时间: 2015-12-3 17:49
标题: 不理解,请大神解释解释~~
为什么下面下面两条输出语句不一样???
int n=13;
system.out.println(n>9?(char)(n-10+`A`):n);
system.out.println(n>9?(char)(n-10+`A`):1);
前面输出68,后面输出D
作者: Weidan    时间: 2015-12-3 20:25
试了一下 同没搞懂
作者: 断魂oo血狼    时间: 2015-12-3 21:19
我觉得是字符类型的原因 n是int型 第一行输出可能为char型 也有可能是int 型 所以转换了
作者: 断魂oo血狼    时间: 2015-12-3 21:49
断魂oo血狼 发表于 2015-12-3 21:19
我觉得是字符类型的原因 n是int型 第一行输出可能为char型 也有可能是int 型 所以转换了  ...

就是说第一行最高类型为int 第二行为char
作者: remix7    时间: 2015-12-3 22:02
不懂帮顶一下..~--
作者: Hi.。    时间: 2015-12-3 22:25
反编译一下.class文件 就明白了。自己写的:
  1. int n = 13;
  2.                 System.out.println(n > 9 ? (char) (n - 10 + 'A') : n);
  3.                 System.out.println(n > 9 ? (char) (n - 10 + 'A') : 1);
复制代码

反编译得到:
  1. int n = 13;
  2.                 System.out.println(n <= 9 ? n : ((int) ((char)((n - 10) + 65))));
  3.                 System.out.println(n <= 9 ? '\001' : (char)((n - 10) + 65));
复制代码




作者: xinxiangchen    时间: 2015-12-3 22:34
强制转换只转换了(n-10+`A`)
第一个语句“:”两边输出格式分别是char和int,自动提升均为int
第一个语句“:”两边输出格式分别是char和无,自动提升均为char
作者: xinxiangchen    时间: 2015-12-3 22:36
两边输出格式看的是变量对应的格式
作者: 崔宁    时间: 2015-12-3 22:48
字符类型转换问题吧!同不是很懂!帮顶
作者: hrfhwy    时间: 2015-12-4 22:17
不懂,顶
作者: ninety_奶挺    时间: 2015-12-4 22:24
System.out.println(n>9?(char)(n-10+'A'):n); 输出为char型和int型,会自动提升为int。如果将其改为
System.out.println(n>9?(char)(n-10+'A'):(char)n); 输出的就是字符D了。
System.out.println(n>9?(char)(n-10+'A'):1);输出为D是因为后面的常量1在char的取值范围内,所以不会自动提示为int型,输出为字符D 。如果将1改为在char取值范围外的常量,比如-1或65536,你会发现其输出结果就变成68了。
作者: Ansel_young    时间: 2015-12-4 23:09
ninety_奶挺 发表于 2015-12-4 22:24
System.out.println(n>9?(char)(n-10+'A'):n); 输出为char型和int型,会自动提升为int。如果将其改为
Syste ...

一语惊醒~谢谢大神
作者: 金金金小天    时间: 2015-12-4 23:34
新手来学习,顶顶顶




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