java 条件表达式总结,实例

 1 private static void test() {
 2         char x = 'X';
 3         int i = 0;
 4         System.out.println("------------------------");
 5         System.out.println(true ? x : 123);// X
 6         System.out.println(false ? x : 123);// {
 7         System.out.println(false ? x : 1235555555);// 1235555555
 8         System.out.println(true ? x : i);// 88
 9         System.out.println(false ? x : i);// 0
10         System.out.println(false ? i : x);// 88
11         System.out.println("------------------------");
12 
13         int in = 80;
14         System.out.println(in < 100 ? 90 : 100);// 90
15         System.out.println(in < 100 ? 90 : 100.0);// 90.0
16         System.out.println("------------------------");
17         System.out.println(in < 100 ? 90.0 : 100);// 90.0
18         System.out.println(in < 100 ? 90.0 : 100.0);// 90.0
19     }

条件运算符规则 
1、如果第2个和第三个有相同的类型,那么它就是条件表达式的类型。 
2、如果一个操作数的类型是T,T为byte、short、char,而另一个操作数是一个int类型的 常量 表达式时,如果条件表达式的类型为T时,结果为类型T 。

如,

System.out.println(false ? x : 123);// {
System.out.println(false ? x : 1235555555);// 1235555555
第一句中,123这个字面常量值,是可以被x(类型为char)来表示的,所以整个条件表达式的类型为char。
而第二句中,1235555555不能够用char来表示,所以整个条件表达式的类型为int.

又如,
 8         System.out.println(true ? x : i);// 88
 9         System.out.println(false ? x : i);// 0
第一句中和第二句中的数据都可以用char来表示,故整个表达式的类型为char.


3、否则将对操作数类型运用2进制数字提升,而表达式的类型就是第二个和第三个操作数被提升后的类型。

 

在JDK1.4版本或之前,条件操作符 ?: 中,当第二个和延续三个操作数是引用类型时,条件操作符要求它们其中一个

必须是另一个的子类型,那怕它们有同一个父类也不行:

 1 package abx.asfsd;
 2 
 3 public class T {
 4     public static void main(final String[] args) {
 5         System.out.println(f());
 6     }
 7 
 8     public static T f() {
 9         // !!1.4不能编译,但1.5可以
10         // !!return true?new T1():new T2();
11         return true ? (T) new T1() : new T2();// T1
12     }
13 }
14 
15 class T1 extends T {
16     @Override
17     public String toString() {
18         return "T1";
19     }
20 }
21 
22 class T2 extends T {
23     @Override
24     public String toString() {
25         return "T2";
26     }
27 }

在5.0或以上版本中,条件操作符在延续二个和第三个操作数是引用类型时总是合法的。其结果类型是这两种类型的最

小公共超类。公共超类总是存在的,因为Object是每一个对象类型的超类型,上面的最小公共超类是T,所以能编译。

posted on 2014-12-11 16:36  决心觉新  阅读(171)  评论(0)    收藏  举报