首页新闻找找看学习计划

public int add(int a, int b) 与public void add(Integer a, Integer b)是什么关系?重载吗?

0
悬赏园豆:10 [已解决问题] 解决于 2019-03-25 09:06

今天在学习过程中发现的问题,在同一个类里面
public int add(int a, int b)public void add(Integer a, Integer b)这两个方法是什么关系?算是重载吗?
那为什么public int add(int a, int b)public int add(Integer a, Integer b)编译器就报错了呢?

幽林绿野的主页 幽林绿野 | 初学一级 | 园豆:192
提问于:2019-03-24 16:55
< >
分享
最佳答案
0

重载的条件:方法名相同、参数类型不同、参数个数不相同。返回类型可以不相同
这个也算重载但是Integer是int的封装类型,在返回值不一样参数类型不一样时会认为不是同一个方法。
在调用方法时会先查找基本数据类型,没找到匹配的再继续查找封装类型,所以永远只会执行int类型参数的方法;
当返回值都为int类型时,int a=5;Integer b=5;a=b;所以编译时会认为是两个相同方法。

收获园豆:10
一世红尘 | 菜鸟二级 |园豆:321 | 2019-03-24 19:43

好吧,好像是我搞错了。昨天又测试了一下,发现public int add(int a, int b)和public int add(Integer a, Integer b)是没问题,可以重载的。
昨天报错是因为方法写完还没给指定的返回值。有点汗颜... 这两个方法在调用时,就需要指定类型了。比如调用add(int a,int b)就是 对象.add(1,3),调用add(Integer a,Integer b)就是 对象.add(new Integer(20),new Integer(30))。但是如果是对象.add(new Integer(30),2)这样就报错了,这样会产生歧义,编译器不知道该调用哪个方法。
最后还是十分感谢您的回答了,让我的脑洞也扩大了不少。

幽林绿野 | 园豆:192 (初学一级) | 2019-03-25 09:05
其他回答(1)
0

所以你的问题是:方法签名包含哪些信息.

吴瑞祥 | 园豆:28731 (高人七级) | 2019-03-24 21:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册