黑马程序员技术交流社区

标题: JAVA基础 [打印本页]

作者: 李建锋    时间: 2011-12-5 22:27
标题: JAVA基础
本帖最后由 jxljf1989 于 2011-12-6 09:52 编辑

n=67;
System.out.println(n>9?n-67+'A':n);会不会输出字母,请解释原因!
作者: 刘海涛    时间: 2011-12-5 22:38
本帖最后由 刘海涛 于 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
复制代码

作者: 申绪胜    时间: 2011-12-5 22:41
不会的 因为char所代表的ASC码如果参与了运算
就会转换成int型的,那么打印的时候,就是按照int的toString方法打出相应的数字
作者: 杨银川    时间: 2011-12-5 22:59
不会输出字母,会输出65,它是'A'的十进制数表示,原因是这是一个类型转换问题,一般是从低级到高级的自动类型转换,而字符型的比整形的低,所以输出的是整形。
作者: 常登凯    时间: 2011-12-6 00:06
恩,不会输出字母,JAVA运算过程中有优先级的,INT数据优先级大于字符类型,所以当整形数据和字符类型进行运算时会自动转换成int类型进行输出
作者: 王青山    时间: 2011-12-6 00:26
不会,楼上几位讲的都很清楚了。
作者: 杨强    时间: 2011-12-6 08:46
不会 强转为char型才可以
作者: 方书堂    时间: 2011-12-6 09:23
本帖最后由 方书堂 于 2011-12-6 09:27 编辑

n=67 ,n-67+'A'=0+‘A’。因为0是Int型,那么'A'会自动转换成int,也就是对应的65
所以输出的会是65,而不会是字母
作者: 李建锋    时间: 2011-12-6 09:50
刘海涛 发表于 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 09:50
杨强 发表于 2011-12-6 08:46
不会 强转为char型才可以

那么在n〉9 ,System.out.println(n>9?(char)(n-67+'A'):n)会不会输出字母呢?;
作者: 刘海涛    时间: 2011-12-6 09:59
本帖最后由 刘海涛 于 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 这时候输出字母
作者: 李建锋    时间: 2011-12-6 10:25
刘海涛 发表于 2011-12-6 09:59
不会 记住 ":"  两边的类型必须是一样的,如果可以自动转,就会自己转,不能转就编译出错。
你的虽然你的 ...

恩,强!
作者: 杨强    时间: 2011-12-6 11:22
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
提示: 作者被禁止或删除 内容自动屏蔽
作者: 颜小飞    时间: 2011-12-6 11:40
本帖最后由 颜小飞 于 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
作者: 刘元霄    时间: 2011-12-6 12:35
不会。char 会升成int
作者: 李建锋    时间: 2011-12-6 13:16
刘元霄 发表于 2011-12-6 12:35
不会。char 会升成int

恩,牛!
作者: 箫庐    时间: 2011-12-6 17:18
不会:

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

  结果上面以给出.

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



作者: 李建锋    时间: 2011-12-6 18:49
箫庐 发表于 2011-12-6 17:18
不会:

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

你中了!
作者: 戴振良    时间: 2011-12-7 20:36
刘海涛 发表于 2011-12-5 22:38
不会。

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

原来如此啊,学习了,
作者: 黑马巩伟伟    时间: 2011-12-7 23:40
之前我也一直纠结这个问题,今天总算是学习了。。。。。
作者: 周胜    时间: 2011-12-8 00:46
0+'A'  =  int + char...  char会自动转换成int型。。
作者: lucky_xingxing    时间: 2011-12-12 15:04
{:soso_e183:}
作者: 马伟奇    时间: 2011-12-12 23:05

当字符与整数运算的时候,字符会自动向上转型,转成int,所以打印出来的就是整数




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