我有兩個參數int和long的add方法。當我調用「add(2)」時,調用int參數的方法。任何人都可以幫助這背後的邏輯。爲什麼不調用其他add方法。不同參數的Java方法調用
private static void add(int a){
System.out.println("int");
}
private static void add(long b){
System.out.println("long");
}
我有兩個參數int和long的add方法。當我調用「add(2)」時,調用int參數的方法。任何人都可以幫助這背後的邏輯。爲什麼不調用其他add方法。不同參數的Java方法調用
private static void add(int a){
System.out.println("int");
}
private static void add(long b){
System.out.println("long");
}
這是方法重載。當具有相同名稱的多個方法可用時,編譯器會選擇最適合所提供參數的方法。
2
是int
類型的文字,所以add(2)
調用了採用int
參數的方法。要調用需要long
的方法,請致電add(2L)
或add((long)2)
。
概念的背後,這是方法重載其在編譯時間檢查,當傳遞int (2)
作爲參數傳遞給方法add
,那麼它將匹配最接近的方法,如果用add
多種方法存在並且匹配給定PARAM用最好的匹配方法,即匹配最好的參數列表。
瞭解更多關於方法重載https://docs.oracle.com/javase/tutorial/java/IandI/override.html和https://www.tutorialspoint.com/java/java_overriding.htm。
如果可能,數字字面值2
被評估爲int
類型第一。編譯器總是試圖把它變成int
。如果int
未編譯,請嘗試將其評估爲其他類型。
所以在這裏,如果刪除int
參數的方法,2
將是long
類型。如果您刪除兩個過載並添加一個接受double
,2
將被評估爲double
類型。
如果您想明確說出要調用採用long
的方法,請使用長文字,如2L
或2l
。或者,通過(long)2
投下它。
默認情況下,Java將嘗試將(整數)數字文字視爲int值,因此將調用期望int參數的方法。
整數常量
字面的整數類型的長期,如果它以字母L或l結束; 否則它是int類型的。建議您使用上 情況下,字母L,因爲小寫字母l很難從數字1
見Oracle Tutorial區分 。
你知道重載嗎? –