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,所以能编译。