2017-06-06 11 views
-1

私は短いに アサインint型の値を午前とき、私はその後、その後、エラーをメートル(ショート)がM(int型)には適用されませんというエラーになっていないが、午前、私はエラーなぜメソッド呼び出しでエラーが発生していますか?

public class MethodOverloading 
{ 

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

public static void main(String[] args) 
{ 

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

} 

を取得しています。このコードを書いていますもしintを渡すことができないならば、shortを受け入れるメソッドへの引数としての値を とすると、どのように短い変数が以下のようにint値を受け入れていますか?

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

答えて

0

10が短くないint型のように考えられているので、あなたは、intshortにをキャストする必要があります。それに関連付けられたタイプがありませんので、

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

キャスト10は、(Javaが前提としていこれは16ビットのshortではなく32ビットのintです)を短くします。

3

リテラルがメソッドに渡されるのとは異なり、割り当ての際にナレーション変換が発生する可能性があります。変数のタイプはバイト、短い、またはcharであり、定数式の値が、変数の型で表現可能である場合JLS

から狭くプリミティブ変換を使用することができます。

0

これは静的バインディングであり、代入演算子 '='はダウンキャストで厳密ではありません。しかし、メソッドバインダーは厳密に型です。 void m(int i)と一緒にvoid m(int i)メソッドがもう1つあると想像してください。メソッドバインダーは呼び出しを正しいメソッドにバインドする必要があります。だからそれは厳格でなければならない。

短いs = 10の場合、jdkはコンパイル時に値をダウンキャストします。したがって、値はsに割り当てられます。実際のint値の値を99999999と指定すると、short 10のカスケードになります。コンパイルしないでください。

最後に、静的メソッドバインディングは厳密な型です。

関連する問題