java方法重載和參數類型自動提升方式
方法重載和參數類型自動提升
方法重載的意思是
一個類中可以由多個方法具有相同的名字,但這些方法的參數必須不同,
參數不同是指滿足下列之一:
- 參數的個數不同
- 參數的個數相同,但參數列表中對相應的某個參數的類型不同
對于基本類型數據而言
參數類型存在自動提升
以byte a = 1為例,存在如下自動提升方式:
byte–> short–> int --> long --> float --> double --> Integer -->Object
java基本類型重載
1.重載
java允許在一個類中,多個方法擁有相同的名字,但在名字相同的同時,必須有不同的參數,這就是重載
2.基本類型重載
基本類型能從一個較小的類型自動提升至一個較大的類型,此過程涉及重載時,可能會造成一些混淆。
3.代碼示例
public class Test { /** * 測試涉及基本類型的重載 */ public static void main(String[] args) { System.out.print("char類型重載:"); char x='x'; f1(x);f2(x);f3(x); System.out.print("byte類型重載:"); byte y=0; f1(y);f2(y);f3(y); System.out.print("short類型重載:"); short z=0; f1(z);f2(z);f3(z);f4(z); } public static void f1(char x){System.out.print("f1(char)");} public static void f1(byte x){System.out.print("f1(byte)");} public static void f1(short x){System.out.print("f1(short)");} public static void f1(int x){System.out.print("f1(int)");} public static void f1(long x){System.out.print("f1(long)");} public static void f1(float x){System.out.print("f1(float)");} public static void f1(double x){System.out.print("f1(double)");} public static void f2(short x){System.out.print("f2(short)");} public static void f2(int x){System.out.print("f2(int)");} public static void f2(long x){System.out.print("f2(long)");} public static void f2(float x){System.out.print("f2(float)");} public static void f2(double x){System.out.print("f2(double)");} public static void f3(int x){System.out.print("f3(int)");} public static void f3(long x){System.out.print("f3(long)");} public static void f3(float x){System.out.print("f3(float)");} public static void f3(double x){System.out.print("f3(double)");} public static void f4(long x){System.out.print("f4(long)");} }
輸出:
char類型重載:f1(char)f2(int)f3(int)
byte類型重載:f1(byte)f2(short)f3(int)
short類型重載:f1(short)f2(short)f3(int)f4(long)
結論:
1)如果傳入的數據類型小于方法中聲明的形參類型,實際數據就會被提升。
2)char類型有所不同,如果無法恰好找到char參數的方法,但是int參數方法存在時,char直接提升至int型。
3)反過來,如果傳入的實際參數大,而形式參數類型小,則需要通過強制類型轉換(窄化轉化),否則編譯器報錯。
4.重載解析過程
1)根據調用的方法名,查找是否有定義好的同名方法,如果沒有就會報錯
2)比較形參和實參的數目是否相等,如果沒有則會報錯。如果有一個或多個方法符合條件,這些方法進入候選集
3)與候選集中的方法比較參數表,如果對應位置上的每個參數類型完全匹配,或者可以通過擴展轉換相匹配,則該方法稱為可行方法,并入可行集。若不存在可行方法,則會報錯
4)在可行集中按照下面的原則選取最佳可行方法
5.可行集獲取的原則
1)若每一個參數都可以完全匹配,它就是最佳可行方法
2)若某個方法的每一個參數都不比別的方法差,且至少有一個參數比別的方法好,它就是最佳可行方法,這里的差和好是指,完全匹配要比擴展轉化好,不過同樣是擴展轉換,仍然存在好喝差的問題,擴展轉換有兩條路徑
byte-short-int-long-float-double
char-int-long-float-double
這兩條路徑中位于左邊的類型都可以轉換為右邊的類型,不過源類型與目標類型的距離越近,則這種轉化就越好。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring Boot與Kotlin定時任務的示例(Scheduling Tasks)
這篇文章主要介紹了Spring Boot與Kotlin定時任務的示例(Scheduling Tasks),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03