ここでコードを実行すると、出力としてcalled
が得られます。理由はわかりません。called new
1はshort
とint
の両方の範囲になるため、同じ番号の2つのコンストラクタ。パラメータは異なりますがデータ型が異なります
public class MyClass {
private int x;
public MyClass(){
this(1);
}
public MyClass(int x){
System.out.println("called");
this.x = x;
}
public MyClass(short y){
System.out.println("called new");
this.x = y;
}
public static void main(String args[]) {
MyClass m = new MyClass();
System.out.println("hello");
}
}
どのように1が短くないかを確認しないでください – Coder17
@ Coder17コンパイラが「int」であるとみなした場合、どのように小さくても大きければ、接尾辞を持たない整数の数値リテラルです。コンパイラは 'int'リテラルの値をチェックして' short'変数に収まるかどうかを判断しません。コンパイラがこのようなチェックを行うのは、 'int'リテラルを' short'変数に代入するときだけです。 – Eran
情報ありがとうございます – Coder17