本帖最后由 吴小铁你好 于 2012-6-6 19:56 编辑
楼主这个问题提的好,如果代码是这样的就能得到a a了。- package zhangxiao;
- public class D{
- public static void main(String[] args){
- char x = 'a';
- int a = 0;
- System.out.println(true ? x : 0);
- System.out.println(false ? 0 : x);
-
- /* System.out.println(x);
- System.out.println(a); */
-
- }
- }
复制代码 实质上这就是条件运算符对于运算结果类型的限制:
(1)假如表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。
(2)假如一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。
(3)除以上情况外,假如表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型。
System.out.println(true?x:0); 表达式1是char类型,表达式2是int类型的常量表达式,而且这个常量表达式的值0可以用char类型来表示,因此整个条件运算符结果的类型就应当是char类型,所以输出的结果就是'A'。
System.out.println(false?a:x); 表达式1是int类型的变量,表达式2是char类型的变量,没有常量表达式。因此要进行类型提升,把char类型提升为int类型,整个条件运算符结果的类型就是int类型。所以输出结果就是97。 |