2013-07-09 64 views
4

任何人都可以告訴我,爲什麼「int」被打印,如在內部工作。Java函數超載

class Test { 

void Method(int i) { 
    System.out.println("int"); 
} 
void Method(String n) { 
    System.out.println("string"); 
} 

public static void main(String [] a) { 
    new Test().Method('c'); 
    } 

} 
+8

該char被轉換爲int。把雙引號,你會得到字符串。 –

回答

9

字符c被強制轉換爲int。它不是將被鑄造爲String

更正式地,從the JLS §5.5 - 擴大轉換需要從char地方到intlongfloat,或double

永不會被視爲String的原因是char不能被自動裝箱到String

1

'c'是一個字符,根據其單引號。作爲一個原始的數字(有點)類型,它比字符串更容易轉換爲整數,因爲後者必須是明確的。

您還可以修改Method(int i)以打印i並嘗試不同的字符。

0

char原始類型和其被澆鑄int,而String對象

在另一方面,有在Java中的功能,稱爲自動裝箱其中適於當一些原始類型澆鑄對象(例如intIntegerbooleanBoolean),但它不適用於char工作。 char被自動複製到Character

1

char實際上是Java中的數字類型。當您進行回調時,它會自動轉換爲int,這就是爲什麼該方法會打印int

Oracle tutorials,我們可以看到:

char數據類型是單16位的Unicode字符。它有 最小值'\ u0000'(或0)和最大值'\ uffff'(或 65,535)。

0

當您通過'c'時,它被假定爲char;如果您嘗試通過"c",則將假定爲string

+0

他沒有接受char的重載方法。 –

+0

nope我的意思是'c'是char,並且被假定爲一個int,所以int重載函數的版本被稱爲 –

+0

我只是想告訴你徹底的回答。不要讓任何人承擔任何事情。 –

0

'c'是一個char類型而不是字符串。 'c'可以與(int)'c'比較

1

傳遞帶單引號的變量被認爲是char。字符變成int變量。

如果您想將其作爲String傳遞,只需使用雙引號。

new Test().Method("c"); 

上的原始類型特定的轉換被稱爲寬元數據的轉換:

字節短,整型,長整型,浮點,或雙

短到int,長整型,浮點,或雙

炭爲int,長整型,浮點,或雙

INT長,浮動,或雙

長浮動或雙

浮動翻番

你可以在這裏閱讀更多:JLS §5.1.2

0

在Java中,字符表示爲數字。具體來說,Java通過其Unicode代碼來表示一個字符。如果我沒有弄錯,Unicode規範中的字符'c'是98。

當您撥打Method('c')時,該程序有兩個方法簽名選項:其中'c'是int,另一個是String。由於內心深處'c'是一個數字,因此它被轉換爲int並被視爲數字98.字符不會被轉換爲Strings