2017-05-11 93 views
-3

我有兩個參數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"); 
} 
+0

你知道重載嗎? –

回答

7

這是方法重載。當具有相同名稱的多個方法可用時,編譯器會選擇最適合所提供參數的方法。

2int類型的文字,所以add(2)調用了採用int參數的方法。要調用需要long的方法,請致電add(2L)add((long)2)

0

如果可能,數字字面值2被評估爲int類型第一。編譯器總是試圖把它變成int。如果int未編譯,請嘗試將其評估爲其他類型。

所以在這裏,如果刪除int參數的方法,2將是long類型。如果您刪除兩個過載並添加一個接受double,2將被評估爲double類型。

如果您想明確說出要調用採用long的方法,請使用長文字,如2L2l。或者,通過(long)2投下它。

0

默認情況下,Java將嘗試將(整數)數字文字視爲int值,因此將調用期望int參數的方法。

整數常量

字面的整數類型的長期,如果它以字母L或l結束; 否則它是int類型的。建議您使用上 情況下,字母L,因爲小寫字母l很難從數字1

Oracle Tutorial區分 。