2017-06-06 65 views
-1

當我寫這個代碼我收到錯誤爲什麼方法調用給出錯誤?

public class MethodOverloading 
{ 

void m(short i) 
{ 
System.out.println("SHort"); 
} 

public static void main(String[] args) 
{ 

MethodOverloading ml=new MethodOverloading(); 
ml.m(10); 
} 

} 

我收到錯誤米(短)不適用於M(INT),但是當我 分配int值短則沒有錯誤,則如果我不能將int 值作爲參數傳遞給接受short的方法,那麼short變量如何接受int值如下所示?

short d=10; 
System.out.println(d); 

回答

0

你要投的intshort,因爲10被認爲是像int不是一個短期:鑄鐵

ml.m((short)10); 
0
m1.m((short) 10); 

10(因爲沒有與它相關類型的Java假定它是一個32位整數而不是16位短)。

3

縮小轉換可以發生在一個賦值中,而不是傳遞給方法的文字。從JLS

如果變量的類型是字節,短,或炭和常量表達式的值在變量的類型可表示可使用基本收縮轉換。

0

這是靜態綁定,並且賦值運算符'='在向下投射時不嚴格,但方法聯編程序對類型是嚴格的。試想一下,你還有一個方法void m(int i)和void m(int i),方法聯編程序必須將調用綁定到正確的方法。所以它一定是嚴格的。

簡而言之,s = 10的情況下,jdk會降低編譯時的值,所以這個值將被分配給s將會縮短10的等級,同樣如果你試圖分配一個真實的int範圍值,比如99999999,它會不編譯。

最後靜態方法綁定對類型是嚴格的。

相關問題