首页 > 试题

重载函数的特性-总结

更新时间:2025-01-08 06:09:31 阅读: 评论:0

2023年12月11日发(作者:教育招生考试院)

重载函数的特性-总结

重载函数的一些总结

直接show code + 个人总结

①重载函数可以区分拆装箱

重载方法的调用过程中,入参数据如果有基本类型不再装拆箱,因为重载可以区分入参对象是基本类型还是对象类型,下例可以体现出来:

package test;

public class Override {

public static void f(int a){

n("int");

}

public static void f(Integer a){

n("Integer");

}

public static void main(String[] args) {

int intA = 10;

Integer integerA = 10;

f(intA);

f(integerA);

}

}

//输出:

//int

//Integer

②重载函数入参都有Object…对象时,就无法通过入参拆装箱来选择哪一个重载函数

public class Override {

public static void f(int a, bjects){

n("int");

}

public static void f(Integer a, bjects){

n("Integer");

}

public static void main(String[] args) {

int intA = 10;

Integer integerA = 10;

f(intA);

//The method f(int, Object[]) is ambiguous for the type Override

f(integerA);

//The method f(int, Object[]) is ambiguous for the type Override

}

}

上面的这个例子,调用重载函数的时候都会报错。如果重载函数没有Object…那么可以通过区分入参对象是否拆装箱来实现重载,但是入参

如果有Object…则无法通过入参对象是否拆装箱来区分了。

具体原因应该是涉及到JVM的原理了。

③重载函数面对两个方法都符合的入参,会优先选择更准确的方法。

public class Override {

public static void f(int a){

n("int");

}

public static void f(Integer a, bjects){

n("Integer");

}

public static void main(String[] args) {

int intA = 10;

Integer integerA = 10;

f(intA);

f(integerA);

}

}

//输出:

//int

//int

同样的,如果重载函数改为f(int a, Object…objects)和f(Integer a),那么最后的输出结果为Integer Integer。

虽然理论上两个重载函数的入参都符合f(intA)和f(integerA)但是JVM却选择了没有Object…的重载函数。建立在都符合入参的情况下JVM

会去选择更准确的重载方法。

这里还可以得出函数重载时考虑的优先级:不定长度>拆装箱

④重载函数无法将基本数据类型和Object…区分开

入参对象有对象(装箱)型Integer,如上述总结③得出的,优先使用有Integer的重载函数

public class Override {

public static void bjects) {

n("");

}

public static void fff(Integer b, bjects) {

n("");

}

public static void main(String[] args) {

fff(10);

}

}

//

如果入参对象有个基本数据类型int/double/long/float/char….,则会报错

public class Override {

public static void bjects) {

n("");

}

public static void fff(int b, bjects) {

n("");

}

public static void main(String[] args) {

fff(10);

//The method fff(Object[]) is ambiguous for the type Override

}

}

目前总结出来四点①重载函数可以区分拆装箱

②重载函数入参都有Object…对象时,就无法通过入参拆装箱来选择哪一个重载函数。

③重载函数面对两个方法都符合的入参,会优先选择更准确的方法。

④重载函数无法将基本数据类型和Object…区分开

可以根据 实例+总结 再思考一下,这些特征的共同点,我们知道重载的使用主要是为了提升函数的复用,准确的说是函数名,他是针对

【函数名+不同的入参】来区分该调用哪个方法。上述总结除了①,都是因为入参加入了Object…才出现的现象,这些特性还是在实践中所

得。思考其面对Object…入参处理的特性,应该涉及到JVM函数载入过程中的选择,也可能是在项目编译的过程中的一些特性。还需要继

续去探索。

总之最后一句,不建议在重载函数中使用Object…,除非彻底摸清楚重载函数调用过程针对Object…入参的处理方式。

本文发布于:2023-12-11 08:28:36,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/88/40948.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:重载函数的特性-总结.doc

本文 PDF 下载地址:重载函数的特性-总结.pdf

标签:重载   函数   特性   总结   装箱   对象   方法
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|