黑马程序员技术交流社区

标题: 三元运算和 if else [打印本页]

作者: 西门吹风    时间: 2014-5-30 16:42
标题: 三元运算和 if else
本帖最后由 西门吹风 于 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>
复制代码


作者: Lex    时间: 2014-5-30 21:58
很简单,你三元目运算里,引用的变量是y是int变量,整个三元目表示是一个数值,你三元目运算的过程中把char型会自动转换成int进行计算的,如果真想输出字符型就这样办System.out.println((char)(y>9?(char)(y-10+'A'):y));:'(,唉混技术分真心不容易
作者: 小坏坏    时间: 2014-5-30 22:46
System.out.println(y>9?(char)(y-10+'A'):(char)y);这句话应该是这样的,char类型的和int类型的相比较,会被自动转化为int类型的。
作者: luoanjade    时间: 2014-5-30 23:06
上面两个回答都是有问题的,
一楼的: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 ,却被强转了。
所以我感觉这个三目运算应该有隐式的向上转型的操作。我目前也不知道怎么解决。
作者: 北极£莜蓝    时间: 2014-5-30 23:36
三元运算符y>9?(char)(y-10+'A'):y,可以算出y=12,而使用12做为传递参数时,编译器在选择数据类型时会参考“:”两侧的数据类型,如果匹配或足以存储该数据则存储为同一数据类型,如果不匹配则[b]替换成其他数据类型.所以   
   (char)(y-10+'A')结果是char型,但是 (char)(y-10+'A'):y会自动匹配成int 类型.故打印出的是67而不是c
作者: LFW    时间: 2014-5-31 02:13
一楼和四楼说的对。




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