谈谈java的三元操作符(条件操作符)

转载:http://hi.baidu.com/%B3%F3%C5%AEyuyu/blog/item/a1e61df59f40f2d0f3d385ef.html

 

概念我就不说了。

今日小谈类似问题

public class Apple{
public static void main(String[] args)
{
   char x='Y';
   int i=1;
   System.out.println(true? x:i);
   System.out.println(false ? 1:x);
}

} 这个输出为什么是89和Y,不是Y和Y呢?

答案是:(比较长,耐心看)

(1)如果表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。

(2)如果一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。


(3)除以上情况外,如果表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型。


System.out.println(true?x:0); / ne3。表达式1是char类型,表达式2是int类型的常量表达式,而且这个常量表达式的值0可以用char类型来表示,因此整个条件运算符结果的类型 就应当是char类型,所以输出的结果就是'A'。
System.out.println(true?x:1111111110); / ne4。表达式1是char类型,表达式2是int类型的常量表达式,但是这个常量表达式的值已经超出了char类型的取值范围,因此要进行类型提升,把 char类型提升为int类型,整个条件运算符结果的类型就是int类型了,所以输出的结果是65(字符A的ASCII码)。

 

System.out.println(false?i:x); / ne5。表达式1是int类型的变量,表达式2是char类型的变量,没有常量表达式。因此要进行类型提升,把char类型提升为int类型,整个条件运 算符结果的类型就是int类型。所以输出结果就是65。

 

不知道您明白没有,好多人都不知道,此类问题也许不常见,即使出现了,也用if-else代替了。小小菜鸟在此发博,有问题请指正。。。

 

 

 

你可能感兴趣的:(java,html,apple,Blog)