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