黑马程序员技术交流社区

标题: 条件操作符的问题 [打印本页]

作者: 王召轩    时间: 2013-12-9 11:38
标题: 条件操作符的问题
为什么这两个的输出不同呢:Q
  1. char a ='A';
  2.                 int b =0;
  3.                 System.out.println(true ? a:0);
  4.                 System.out.println(false ? b:a);
复制代码

作者: 王国库    时间: 2013-12-9 11:53
a是字符型,b是整型。
作者: 赵青超    时间: 2013-12-9 12:57
  1. //测试:
  2.                 char a ='A';
  3.         int b =0;
  4.         //char变量:int值,输出char变量对应的ASCII值,类型自动转换
  5.         System.out.println(true ? a:0);
  6.         System.out.println(true ? a:b);

  7.         System.out.println(false ? 0:a);
  8.         System.out.println(false ? b:a);
  9.         
  10.         //三元运算     char值:int值,输出char值对应的ASCII值,类型自动转换
  11.         System.out.println(true ? 'A':0);
  12.         System.out.println(true ? 'A':b);
  13.         
  14.         System.out.println(false ? 0:'A');
  15.         System.out.println(false ? b:'A');
复制代码



作者: 四五六七八    时间: 2013-12-9 14:06
设x和y分别是第二个和第三个操作数的类型,那么:
1如果x和y为同一类型,则该类型即是条件表达式的类型。
2如果从x到y存在一个隐式转换,那么y是条件表达式的类型。
3如果从y到x存在一个隐式转换,那么x是条件表达式的类型。
char a ='A'; int b =0;
System.out.println(true ? a:0);//适用于第1点  0这个值会被保存为char(因为0 可以用两个字节保存 即为char)    条件表达式结果类型转化为char
System.out.println(true ? a : 65536);//适用于第2点 65536只能被存储4个字节 即为int
System.out.println(false ? b:a);//适用于第3点 a--->b隐式转换  即b的类型为条件表达式的结果类型
这些转换有些麻烦 还不如不用
作者: 做个有理想的人    时间: 2013-12-9 14:27
public class Demo {
        //低于int型的数据进行运算就都会被提升为int型
        public static void main(String[] args) {
                char a ='A';
        int b =0;
        System.out.println(true ? a:b);//65,第一个输出a被提升为int型了,因为b是int类型
        System.out.println(true ? a:0);//A,第二输出a是和0比较,0是什么类型是不清楚的,所以a类型不变了
        System.out.println(false ? b:a);//65,第三个输出b类型是int,所以a被提升到了int类型
                 

        }
}





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