JAVA-求答案及解析

第24题(1.0分)题号:1134难度:中第8章whatistheresultwhenyoucompileandrunthefollowingcode?classExam... 第24题 (1.0分) 题号:1134 难度:中 第8章
what is the result when you compile and run the following code?
class Example
{
public static void main(String [] args)
{int i=10;
method(i);
}
static void method(long k)
{ System.out.println("long call");
}
static void method(Integer k)
{ System.out.println("Integer call");
}

}
Select all right answer?

A:long call
B:Integer call
C:Compiler error
D:runtime exception
展开
 我来答
匿名用户
2019-12-26
展开全部

这个问题考察的是方法重载时,参数的自动升级问题,java原生数据类型有一个层级关系,如图


当调用有重载方法时,发现参数类型不匹配,则会提升一级参数的类型后再匹配

你的题目中,重载的2个方法,形参分别是Integer和long,而实参类型是int,此时并没有直接匹配实参类型的方法可以调用,此时实参类型会被上调1级变成long类型,这时候就找到了可以调用的方法,所以执行结果就是"long call",当上图中基本数据类型都匹配过之后,如果还没有发现可以调用的方法,才会尝试寻找实参对应包装类为形参的方法

所以此题选择A

追问
所以是和两个重载方法的顺序无关的;
如果第一个形参是double,第二个形参是float
就是会引用第二个重载方法(float)哈?
然后输出的就是:Integer call了吧
追答

当实参int类型,重载方法形参有 float,double,Integer三种的时候,执行结果是执行float形参的方法

如果只有double和Integer形参的2个方法重载,执行结果会是double形参的方法,升级形参类型到double仍然找不到,才会升级到包装类Integer的

升级到Integer还找不到,那么就会报编译不通过,是不会把int升级到Float,Double等包装类的,最多也就把int升级到Integer

螃蟹的八条腿腿
2019-12-26 · TA获得超过418个赞
知道小有建树答主
回答量:1183
采纳率:61%
帮助的人:98.6万
展开全部
A:long call
数据类型!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式