Tiger学习 之 Conditional 与Unboxing

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:可变参数...

你可能感兴趣的:(java 5.0)