Java 两个构造函数具有相同数量的参数,但数据类型不同
在这里,当我运行下面的代码时,我得到了Java 两个构造函数具有相同数量的参数,但数据类型不同,java,multiple-constructors,Java,Multiple Constructors,在这里,当我运行下面的代码时,我得到了调用作为输出,我想知道为什么不调用new。因为1同时属于short和int范围 public class MyClass { private int x; public MyClass(){ this(1); } public MyClass(int x){ System.out.println("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");
}
}
1
是int
文本,因此选择MyClass(intx)
即使删除MyClass(intx)
构造函数,也不会选择MyClass(短y)
。您将得到一个编译错误,因为1
不是short
您必须将
1
转换为short-此((short)1)代码>-为了选择MyClass(短y)
。1
是int
文本,因此选择MyClass(int x)
即使删除MyClass(intx)
构造函数,也不会选择MyClass(短y)
。您将得到一个编译错误,因为1
不是short
您必须将1
转换为short-此((short)1)代码>-为了选择MyClass(短y)
。作为其他答案的补充,我可以建议您在使用相同的文本初始化其他类型的变量时检查调用了哪些构造函数:
short s = 1;
int i = 1;
然后检查在使用上述参数调用MyClass
时调用的构造函数。作为其他答案的补充,我建议您在使用相同的文本初始化其他类型的变量时检查调用的构造函数:
short s = 1;
int i = 1;
然后检查使用上述参数调用MyClass
的构造函数时调用的是哪个构造函数。我不明白为什么1不是short@Coder17任何不带后缀的整数数值文字,无论大小,编译器都将其视为int
。编译器不会检查int
literal的值以确定它是否适合short
变量。编译器唯一一次做这样的检查是将int
文本赋值给short
变量。我不明白为什么1不是short@Coder17任何不带后缀的整数数值文字,无论大小,编译器都将其视为int
。编译器不会检查int
literal的值以确定它是否适合short
变量。编译器执行此类检查的唯一时间是将int
文本指定给short
变量时。