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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李建锋 黑马帝   /  2011-12-5 22:27  /  4465 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jxljf1989 于 2011-12-6 09:52 编辑

n=67;
System.out.println(n>9?n-67+'A':n);会不会输出字母,请解释原因!

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

23 个回复

倒序浏览
本帖最后由 刘海涛 于 2011-12-5 23:10 编辑

不会。

n>9?n-67+'A':n
返回的是int类型

因为char 类型运算会转换为int类型,这是java 基本类型自动转换的原因。n>9 所以执行n- 67 + ’A‘ 返回的是int类型,结果为:65
char byte short 都会转为int运算
例如

  1.         char a = 'a';
  2.         short b = 'b';
  3.         System.out.println(a + 0);  //输出97
  4.         System.out.println(b + 0); //输出98
  5.         System.out.println(a + b); //输出195
复制代码

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
不会的 因为char所代表的ASC码如果参与了运算
就会转换成int型的,那么打印的时候,就是按照int的toString方法打出相应的数字

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
不会输出字母,会输出65,它是'A'的十进制数表示,原因是这是一个类型转换问题,一般是从低级到高级的自动类型转换,而字符型的比整形的低,所以输出的是整形。
回复 使用道具 举报
恩,不会输出字母,JAVA运算过程中有优先级的,INT数据优先级大于字符类型,所以当整形数据和字符类型进行运算时会自动转换成int类型进行输出
回复 使用道具 举报
王青山 来自手机 黑马帝 2011-12-6 00:26:42
地板
不会,楼上几位讲的都很清楚了。
回复 使用道具 举报
杨强 黑马帝 2011-12-6 08:46:37
7#
不会 强转为char型才可以
回复 使用道具 举报
方书堂 黑马帝 2011-12-6 09:23:59
8#
本帖最后由 方书堂 于 2011-12-6 09:27 编辑

n=67 ,n-67+'A'=0+‘A’。因为0是Int型,那么'A'会自动转换成int,也就是对应的65
所以输出的会是65,而不会是字母

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
李建锋 黑马帝 2011-12-6 09:50:05
9#
刘海涛 发表于 2011-12-5 22:38
不会。

n>9?n-67+'A':n

那么在n〉9 ,System.out.println(n>9?(char)(n-67+'A'):n)会不会输出字母呢?;
回复 使用道具 举报
杨强 发表于 2011-12-6 08:46
不会 强转为char型才可以

那么在n〉9 ,System.out.println(n>9?(char)(n-67+'A'):n)会不会输出字母呢?;
回复 使用道具 举报
本帖最后由 刘海涛 于 2011-12-6 10:01 编辑
jxljf1989 发表于 2011-12-6 09:50
那么在n〉9 ,System.out.println(n>9?(char)(n-67+'A'):n)会不会输出字母呢?;


不会 记住 ":"  两边的类型必须是一样的,如果可以自动转,就会自己转,不能转就编译出错。
你的虽然你的左边是char类型,但是char类型自动转为了int  
System.out.println(n>9?(char)(n-67+'A'):(char)n)
如果你将右边也转为char 这时候输出字母

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
刘海涛 发表于 2011-12-6 09:59
不会 记住 ":"  两边的类型必须是一样的,如果可以自动转,就会自己转,不能转就编译出错。
你的虽然你的 ...

恩,强!
回复 使用道具 举报
杨强 黑马帝 2011-12-6 11:22:15
13#
jxljf1989 发表于 2011-12-6 09:50
那么在n〉9 ,System.out.println(n>9?(char)(n-67+'A'):n)会不会输出字母呢?;

不能  两边类型不同 自动转为int 输出的还是数字
回复 使用道具 举报
wsssx 2011-12-6 11:28:40
14#
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
本帖最后由 颜小飞 于 2011-12-6 11:40 编辑
jxljf1989 发表于 2011-12-6 09:50
那么在n〉9 ,System.out.println(n>9?(char)(n-67+'A'):n)会不会输出字母呢?;


不会,字符A在括号进行运算时同样会转换为int 类型进行运算,结果还是为65
回复 使用道具 举报
不会。char 会升成int
回复 使用道具 举报
刘元霄 发表于 2011-12-6 12:35
不会。char 会升成int

恩,牛!
回复 使用道具 举报
箫庐 黑马帝 2011-12-6 17:18:29
18#
不会:

   char short byte三种类型参与运算时,会自动强转为int类型; 'A'在ASCII中对应的是 65,所以转为65参与运算;

  结果上面以给出.

刚上基础班第五天.嘿嘿,共勉~~


评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
箫庐 发表于 2011-12-6 17:18
不会:

   char short byte三种类型参与运算时,会自动强转为int类型; 'A'在ASCII中对应的是 65,所以转为65 ...

你中了!
回复 使用道具 举报
刘海涛 发表于 2011-12-5 22:38
不会。

n>9?n-67+'A':n

原来如此啊,学习了,
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马