関数のオーバーロードに関しては、Javaが実行時に実行する関数をどのように決定するかを完全には理解していません。次のような単純なプログラムがあると仮定しましょう。
public class Test {
public static int numberTest(short x, int y) {
// ...
}
public static int numberTest(short x, short y) {
// ...
}
public static void main(String[] args) {
short number = (short) 5;
System.out.println(numberTest(number, 3));
}
}
私はこれをテストしました-そしてJavaは最初のnumberTest()関数を使用します。なんで?なぜそれは2番目のものを使用していないのですか、あるいはむしろ、なぜそれはコンパイラエラーを示していないのですか?
最初のパラメータはshort
、大丈夫です。しかし、2番目のものは2つの機能を区別します。関数呼び出しはちょうどを使用する3
ので、それは両方である可能性がありますね。また、型変換は必要ありません。または、「3」を使用するたびにJavaは型変換を適用しますint
か?それは常にで始まりbyte
、次にに変換されshort
ますint
か?