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
变量时。