第八题(重载,类型转换)

依然是一个重载的问题,参考第五题    

第五题是关于重载中参数个数不同时的匹配问题,而这道题是重载方法中参数类型不同时的匹配问题

先看看程序的运行结果

Wrapper.java:10: 错误: 对于fun(int), 找不到合适的方法
        fun(z);
        ^
    方法 Wrapper.fun(Long)不适用
      (无法通过方法调用转换将实际参数int转换为Long)
    方法 Wrapper.fun(Short)不适用
      (无法通过方法调用转换将实际参数int转换为Short)
    方法 Wrapper.fun(short)不适用
      (无法通过方法调用转换将实际参数int转换为short)
1 个错误

接下来分析问题的本源

看几个段代码

import java.util.*;
public class Wrapper{
        public static void fun(int n){System.out.println("int");}
        public static void fun(Short n){System.out.println("SHORT");}
        public static void fun(Long n){System.out.println("LONG");}
        public static void main(String[] args){
                short y = 0;
                int z = y;
                fun(y);
                fun(z);
        }
}
运行结果:

int

int

short可以优先转型成int

import java.util.*;
public class Wrapper{
        //public static void fun(int n){System.out.println("int");}
        public static void fun(Short n){System.out.println("SHORT");}
        public static void fun(Long n){System.out.println("LONG");}
        public static void main(String[] args){
                Integer y = 0;
                //int z = y;
                fun(y);
                //fun(z);
        }
}
~      
编译错误

是由于Integer不能转型成Long型

import java.util.*;
public class Wrapper{
        //public static void fun(int n){System.out.println("int");}
        public static void fun(Short n){System.out.println("SHORT");}
        public static void fun(Long n){System.out.println("LONG");}
        public static void main(String[] args){
                int y = 0;
                //int z = y;
                fun(y);
                //fun(z);
        }
}
编译错误

int不能转成其他的封装类

结论

1、调用方法时,Java编译器会寻找最精却的匹配方法,如果无法判断哪个是最精却(歧义调用)的就会出现编译错误。

如:max(double,int)和max(int,double)

2、关于类型转换问题

a.char->int->long,short->int-long

b.基本数据类型->包装类

c.包装类之间不能转换

d.基本数据类型优先考虑转换成基本数据类型,如果没有,再考虑转成对应的包装类(只能是对应的,int不能转成Long)



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值