加宽,自动装箱,var-arg 在重载时的优先判断
Java5的设计者决定:最重要的规则应该是已有代码应该像它们过去那样运行。由于加宽能力已经存在(自动装箱1.5加入),所以优于自动装箱。
java 代码
java 代码
- class A{
- static void go(Integer x) {
- System.out.println("装箱");}
- static void go(long x) {
- System.out.println("加宽");}
- public static void main (String [] args){
- int i=8;
- go(i);
- }
- }
- //打印"加宽"
同样,装箱优于var-arg.
java 代码
- class B{
- static void go(int x,int y) {
- System.out.println("加宽");}
- static void go(byte... x) {
- System.out.println("var-arg");}
- public static void main (String [] args){
- byte b =5;
- go(b,b);
- }
- }
- //打印"加宽"
先加宽,再装箱,成立!
java 代码
- class C{
- /* static void go(Long x) {
- System.out.println("加宽");}*/
- //illegal ,必须先将byte加宽为long 再包装为Long
- static void go(Object o){
- Byte B = (Byte)o;
- System.out.println("先加宽,再包装");
- }
- public static void main (String [] args){
- byte b =5;
- go(b);
- }
- }
- //打印结果:先加宽,再包装
注意:不能从一个包装器加宽的另一个包装器(IS-A失败)