1

在这里,当我运行下面的代码时,我得到called了输出,我想知道为什么不called new。因为 1 属于shortint范围。

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");
        }
    }
4

2 回答 2

5

1int文字,所以MyClass(int x)被选中。

即使您删除了MyClass(int x)构造函数,MyClass(short y)也不会被选中。你会得到一个编译错误,因为1is not short

您必须将其转换1为short -this((short)1);才能MyClass(short y)被选中。

于 2017-11-26T06:55:18.660 回答
0

作为其他答案的补充,我建议您在使用相同的文字初始化其他类型的变量时检查正在调用哪些构造函数:

short s = 1;
int i = 1;

MyClass然后在使用上述参数调用它们时检查正在调用哪个构造函数。

于 2017-11-26T08:24:28.967 回答