2017-05-11 12 views
-3

私は、引数intとlongを持つ2つの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のリテラルであるので、int引数を取るメソッドを呼び出しadd(2)longのメソッドを呼び出すには、add(2L)またはadd((long)2)と呼び出します。この背後にあるの

1

コンセプトは、コンパイル時にチェックされをオーバーロード方法であり、あなたが方法addへの引数としてint (2)を渡すとき、それはaddの複数のメソッドが存在する場合は、最寄りの方法と一致して与えられたのparamにマッチします最適なマッチング方法、すなわち、引数リストに最もよくマッチするもの。

詳細については、https://docs.oracle.com/javase/tutorial/java/IandI/override.htmlhttps://www.tutorialspoint.com/java/java_overriding.htmのメソッドオーバーロードを参照してください。

0

2リテラル数がintタイプ可能な場合であると評価されます。コンパイラは常にそれをintにしようとします。 intがコンパイルされない場合は、他のタイプであると評価してください。

したがって、intパラメータを使用してメソッドを削除すると、2longとなります。両方のオーバーロードを削除してdoubleを受け入れるものを追加すると、2doubleと評価されます。

longのメソッドを呼び出すように明示したい場合は、2Lまたは2lのような長いリテラルを使用します。または、(long)2で長時間キャストします。

0

デフォルトでは、Javaは数値リテラルをint値として扱います。したがって、intパラメータが必要なメソッドが呼び出されます。

整数リテラル

それが文字L又はLで終わる場合整数リテラルは、型の長さです。 それ以外の場合はint型です。小文字のlは数字1

参照Oracle Tutorialから を区別することは困難であるので、あなたが、上 ケース文字Lを使用することをお勧めします。

関連する問題