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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么下面下面两条输出语句不一样???
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

14 个回复

正序浏览
新手来学习,顶顶顶
回复 使用道具 举报
ninety_奶挺 发表于 2015-12-4 22:24
System.out.println(n>9?(char)(n-10+'A'):n); 输出为char型和int型,会自动提升为int。如果将其改为
Syste ...

一语惊醒~谢谢大神
回复 使用道具 举报
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了。
回复 使用道具 举报 1 0
不懂,顶
回复 使用道具 举报
崔宁 中级黑马 2015-12-3 22:48:33
9#
字符类型转换问题吧!同不是很懂!帮顶

点评

谢谢  发表于 2015-12-3 23:41
回复 使用道具 举报
两边输出格式看的是变量对应的格式
回复 使用道具 举报
强制转换只转换了(n-10+`A`)
第一个语句“:”两边输出格式分别是char和int,自动提升均为int
第一个语句“:”两边输出格式分别是char和无,自动提升均为char
回复 使用道具 举报
反编译一下.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));
复制代码



回复 使用道具 举报
不懂帮顶一下..~--
回复 使用道具 举报
断魂oo血狼 发表于 2015-12-3 21:19
我觉得是字符类型的原因 n是int型 第一行输出可能为char型 也有可能是int 型 所以转换了  ...

就是说第一行最高类型为int 第二行为char
回复 使用道具 举报
我觉得是字符类型的原因 n是int型 第一行输出可能为char型 也有可能是int 型 所以转换了

点评

按你的说法第一行和第二行有什么区别?  发表于 2015-12-3 21:45
回复 使用道具 举报
试了一下 同没搞懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马