雖然除去了我認爲是不必要的代碼整理我的項目,我刪除了形式我刪除了必要的構造,但它仍然編譯和運行
public MyClass(int a, int b)
的構造在保持其他構造
public MyClass(double c, double d)
有到INT打電話,int構造,我沒有注意到,但它編譯和運行,但調用的雙重,雙版本,挺正常引起我寫拋出一個異常處理程序。 MyClass不擴展任何其他類。
Java通過什麼規則導致這種不可見的自動轉換髮生?
雖然除去了我認爲是不必要的代碼整理我的項目,我刪除了形式我刪除了必要的構造,但它仍然編譯和運行
public MyClass(int a, int b)
的構造在保持其他構造
public MyClass(double c, double d)
有到INT打電話,int構造,我沒有注意到,但它編譯和運行,但調用的雙重,雙版本,挺正常引起我寫拋出一個異常處理程序。 MyClass不擴展任何其他類。
Java通過什麼規則導致這種不可見的自動轉換髮生?
當然,你是對的。不知何故,我在腦海中認爲它不適用於我認爲更嚴格的類型檢查的構造函數 - 顯然不是! – NickT 2011-05-07 13:58:11
這是一個Widening Primitive Conversion。由於您可以在不丟失任何信息的情況下將int
轉換爲double
,因此Java語言無形地執行此操作。
的方法重載,最具體的方法被調用,所以如果你有foo(int, int)
和foo(double, double)
和你打電話foo(1,2)
然後foo (int, int)
將被調用。但是因爲1,2也可能是雙打的,如果你沒有foo(int, int)
,則會調用foo(double, double)
。
,因爲一個'int'值可以分配給一個'double'變量。 – asgs 2011-05-07 13:50:50