2023年12月11日發(fā)(作者:教育招生考試院)
重載函數(shù)的特性-總結(jié)
重載函數(shù)的一些總結(jié)
直接show code + 個人總結(jié)
①重載函數(shù)可以區(qū)分拆裝箱
重載方法的調(diào)用過程中,入?yún)?shù)據(jù)如果有基本類型不再裝拆箱,因為重載可以區(qū)分入?yún)ο笫腔绢愋瓦€是對象類型,下例可以體現(xiàn)出來:
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
②重載函數(shù)入?yún)⒍加蠴bject…對象時,就無法通過入?yún)⒉鹧b箱來選擇哪一個重載函數(shù)
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
}
}
上面的這個例子,調(diào)用重載函數(shù)的時候都會報錯。如果重載函數(shù)沒有Object…那么可以通過區(qū)分入?yún)ο笫欠癫鹧b箱來實現(xiàn)重載,但是入?yún)?/p>
如果有Object…則無法通過入?yún)ο笫欠癫鹧b箱來區(qū)分了。
具體原因應(yīng)該是涉及到JVM的原理了。
③重載函數(shù)面對兩個方法都符合的入?yún)ⅲ瑫?yōu)先選擇更準(zhǔn)確的方法。
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
同樣的,如果重載函數(shù)改為f(int a, Object…objects)和f(Integer a),那么最后的輸出結(jié)果為Integer Integer。
雖然理論上兩個重載函數(shù)的入?yún)⒍挤蟜(intA)和f(integerA)但是JVM卻選擇了沒有Object…的重載函數(shù)。建立在都符合入?yún)⒌那闆r下JVM
會去選擇更準(zhǔn)確的重載方法。
這里還可以得出函數(shù)重載時考慮的優(yōu)先級:不定長度>拆裝箱
④重載函數(shù)無法將基本數(shù)據(jù)類型和Object…區(qū)分開
入?yún)ο笥袑ο?裝箱)型Integer,如上述總結(jié)③得出的,優(yōu)先使用有Integer的重載函數(shù)
public class Override {
public static void bjects) {
n("");
}
public static void fff(Integer b, bjects) {
n("");
}
public static void main(String[] args) {
fff(10);
}
}
//
如果入?yún)ο笥袀€基本數(shù)據(jù)類型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
}
}
目前總結(jié)出來四點①重載函數(shù)可以區(qū)分拆裝箱
②重載函數(shù)入?yún)⒍加蠴bject…對象時,就無法通過入?yún)⒉鹧b箱來選擇哪一個重載函數(shù)。
③重載函數(shù)面對兩個方法都符合的入?yún)ⅲ瑫?yōu)先選擇更準(zhǔn)確的方法。
④重載函數(shù)無法將基本數(shù)據(jù)類型和Object…區(qū)分開
可以根據(jù) 實例+總結(jié) 再思考一下,這些特征的共同點,我們知道重載的使用主要是為了提升函數(shù)的復(fù)用,準(zhǔn)確的說是函數(shù)名,他是針對
【函數(shù)名+不同的入?yún)ⅰ縼韰^(qū)分該調(diào)用哪個方法。上述總結(jié)除了①,都是因為入?yún)⒓尤肓薕bject…才出現(xiàn)的現(xiàn)象,這些特性還是在實踐中所
得。思考其面對Object…入?yún)⑻幚淼奶匦裕瑧?yīng)該涉及到JVM函數(shù)載入過程中的選擇,也可能是在項目編譯的過程中的一些特性。還需要繼
續(xù)去探索。
總之最后一句,不建議在重載函數(shù)中使用Object…,除非徹底摸清楚重載函數(shù)調(diào)用過程針對Object…入?yún)⒌奶幚矸绞健?/p>
本文發(fā)布于:2023-12-11 08:28:36,感謝您對本站的認(rèn)可!
本文鏈接:http://www.newhan.cn/zhishi/a/88/40948.html
版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。
本文word下載地址:重載函數(shù)的特性-總結(jié).doc
本文 PDF 下載地址:重載函數(shù)的特性-總結(jié).pdf
| 留言與評論(共有 0 條評論) |