Java 短对象创建

Java 短对象创建,java,constructor,wrapper,short,Java,Constructor,Wrapper,Short,我看了这篇文章,但并没有完全回应我所寻找的 有人知道为什么第一行(//1)给出错误,而第二行(//2)没有给出错误吗 正如代码中所述,我理解为什么第二行可以正常工作,但是第一行呢?其中是书写的意义Short s=new Short((Short)4) 一句话:为什么它不隐式地转换它?它是一个常数而不是一个变量 提前感谢。这是因为Java使用“search mechanizm”来查找int类型的构造函数。当您将值分配给varialbe时,它的类型被定义,编译器可以优化代码。对于构造函数(或任何其他

我看了这篇文章,但并没有完全回应我所寻找的

有人知道为什么第一行(//1)给出错误,而第二行(//2)没有给出错误吗

正如代码中所述,我理解为什么第二行可以正常工作,但是第一行呢?其中是书写的意义
Short s=new Short((Short)4)
一句话:为什么它不隐式地转换它?它是一个常数而不是一个变量


提前感谢。

这是因为Java使用“search mechanizm”来查找int类型的构造函数。当您将值分配给varialbe时,它的类型被定义,编译器可以优化代码。对于构造函数(或任何其他方法),这是不可能的

您应该执行以下操作:

 Short s = new Short((short) 4);
原因
4的类型为整数/int且不短。所以,您需要执行显式类型转换,以确保短构造函数采用兼容的类型。

它只是不受支持

对于其他数字对象类型,值有一个文本,默认情况下数字是int,但长时间以来,您有L后缀,double有d等等

如果让new Short(int)抛出异常,那么构造函数将与其他数字构造函数不一致

试图创建一个太大的短原语在编译时进行测试,字节也是如此

如果您这样做:

byte b = 1000000;
您的代码不会编译,而不会引发异常


因此,当您考虑编译器时,行为是一致的。

您可以定义一个使用“short”的构造函数,另一个使用“int”的构造函数,并且语言语义会使您对构造函数的调用不明确。所以你需要使用严格的类型。另外,由于Short是final,请尝试使用Short.valueOf((Short)4)来避免不必要的对象分配。

当您说

Short s = new Short(4);
short s1 = 4;
您指定的是整数文本
4
,而不是短文本,并且在下是不允许的

然而,当你说

Short s = new Short(4);
short s1 = 4;

这取决于Java语言规范所称的a,即使它会失去精度,这也是允许的。

它会给您带来什么错误?@iamnotmaynard第1行给了我这个错误:类型不匹配:无法从int转换为short