Conditional=ternary operator(三目运算符)...用"?"来表示,那么Tiger有什么不一样呢?
引用
Boolean case1 = true;
int s = case1? new Integer(1) : 1;
在Tiger之前,以上代码是不会通过的...因为在":"的两边的数值类型必须是一样的...
在Tiger,是OK的,因为是会unbox的..并且只要两个对象有交集,就可以了...如:
引用
CharSequence cs = case1? (CharSequence)"Hello" : (CharSequence)new StringBuffer("Goodbye");
CharSequence 是String和StringBuffer的交集,因此,这是可以的...这样的话..除了primitive;类型,只要是对象都可以,因为都是来自Object...
如,这里仅仅是例子..
引用
Object cs = case1? (Object)"Hello" : (Object)new Integer(100);
关于控制语句...原本只能通过primitive的现在都支持他们相对的wrapper...例如switch也支持(Integer、Short、Char...),因为unboxing!
about Method OverLoad...下面代码结果是什么?
引用
public void doSomething(double dbl){
System.out.print("double value");
}
public void doSomething(Integer dbl){
System.out.print("Integer value");
}
//调用的代码
int i = 100;
new ObjectB().doSomething(i);
结果:
引用
double value
如果按照aotuBoxing来说的话应该会输出"Integer value"...But,Tiger的Method解释是按照一下顺序的...
1.不做任何boxing、unboxing或者启用vararg来确定method,根据Tiger之前的版本调用。
2.如果第一不失败,再度解析Method,但是会允许boxing和unboxing.不考虑vararg。
3.如果第二步也失败,最后尝试,允许boxing和unboxing.考虑vararg。
所以输出的值是"double value"
vararg:可变参数...