在我运行以下代码时,我得到called
作为输出,我想知道为什么不called new
。由于1属于short
和int
范围。
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");
}
}
答案 0 :(得分:5)
1
是int
字面值,因此选择了MyClass(int x)
。
即使您删除MyClass(int x)
构造函数,也不会选择MyClass(short y)
。您会收到编译错误,因为1
不是short
。
您必须将1
投反对短this((short)1);
- 才能选择MyClass(short y)
。
答案 1 :(得分:0)
作为对其他人的补充,我可以建议您在使用相同的文字初始化其他类型的变量时检查调用哪些构造函数:
short s = 1;
int i = 1;
然后检查调用MyClass
的构造函数,并使用上述参数调用它们。