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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 西门吹风 中级黑马   /  2014-5-30 16:42  /  1644 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 西门吹风 于 2014-5-30 16:46 编辑

如下代码,用注释中的if  else 执行可以正确打印  C 3,
使用 System.out.println(y>9?(char)(y-10+'A'):y);打印 67 3,
但使用 System.out.println(y>9?(char)(y-10+'A'):y);时,第一次循环y=12,y>9为真,
返回(char)(y-10+'A'),也就是C,但打印的是67,
为什么没有执行强制转换???

  1. class JingZhi
  2. {
  3.      public static void main(String[] args)
  4.      {
  5.             int x=60,y;
  6.             for(int i=x ;(x&15)!=0;x=x>>>4)
  7.             {
  8.                   y=x&15;
  9.                   System.out.println(y>9?(char)(y-10+'A'):y);
  10.                   /*
  11.                   if(y>9)
  12.                   {
  13.                   System.out.println((char)(y-10+'A'));
  14.                   }
  15.                   else
  16.                   {
  17.                    System.out.println(y);
  18.                   }
  19.                   */
  20.             }
  21.       }
  22. }
  23. <p> </p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 继续加油~

查看全部评分

5 个回复

倒序浏览
很简单,你三元目运算里,引用的变量是y是int变量,整个三元目表示是一个数值,你三元目运算的过程中把char型会自动转换成int进行计算的,如果真想输出字符型就这样办System.out.println((char)(y>9?(char)(y-10+'A'):y));:'(,唉混技术分真心不容易

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 继续加油!

查看全部评分

回复 使用道具 举报
System.out.println(y>9?(char)(y-10+'A'):(char)y);这句话应该是这样的,char类型的和int类型的相比较,会被自动转化为int类型的。
回复 使用道具 举报
上面两个回答都是有问题的,
一楼的:System.out.println((char)(y>9?(char)(y-10+'A'):y));
二楼的:System.out.println(y>9?(char)(y-10+'A'):(char)y)
这两种虽然都能打印出 C 。但是打印的 ”(char)y“这个却是错的,本来是想打印int型的 y ,却被强转了。
所以我感觉这个三目运算应该有隐式的向上转型的操作。我目前也不知道怎么解决。
回复 使用道具 举报
三元运算符y>9?(char)(y-10+'A'):y,可以算出y=12,而使用12做为传递参数时,编译器在选择数据类型时会参考“:”两侧的数据类型,如果匹配或足以存储该数据则存储为同一数据类型,如果不匹配则[b]替换成其他数据类型.所以   
   (char)(y-10+'A')结果是char型,但是 (char)(y-10+'A'):y会自动匹配成int 类型.故打印出的是67而不是c
回复 使用道具 举报 1 0
一楼和四楼说的对。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马