Java的所有数字都必须是int型。
以下行在Java 1.5中是合法的
短整型=1; //willcompiletoshorts=short.value of () short )1)-thus you can ' texceedshortmaxvaluei.e。
短整型=4444; //is invalid for autoboxing
相同的机制用于实例化Integer和Byte。 但是,Long的动作完全不同。 以下代码显示编译时错误
长L=10;
因为Long用同样的方法进行长类型的自动装箱
Long l=10L; //isvalidandistranslatedintolong.value of (10l ) )。
我不明白为什么int不能分配给Long变量。 你觉得这件事怎么样?
解决方法:
我认为这个问题不是关于一般的原始和包装。
问题是关于将java转换为java.lang.Long和将int转换为java.lang.Short之间的区别。
JLS :
“如果表达式是字节、短整型、字符或整型常量表达式(第15.28节) :
如果变量类型为byte、short或char,则可以使用缩减基元转换,常量表达式的值可以用变量类型表示。
如果变量类型可以使用缩减基元转换进行装箱转换:
字节和常量表达式的值可以用类型字节表示。
Short表达式和常量表达式的值可以用Short类型表示。
字符和常量表达式的值可以用char类型表示。
因此,所有=32位原语都很容易转换,但长度(64位)需要特殊转换。
这似乎不符合逻辑。
像往常一样,不合逻辑的东西都说明了java的向后兼容性和历史的进化。
例如,从1.0版开始,java中存在Integer和Long类。 从1.1版开始,java中存在Short和Byte类。
它是起点,整数可以是整数或长整数两种类型。 因此,我认为这两个数字有不同的投影规则。 然后添加了short和byte。
我认为short和byte可以通过具体的JVM实现32位。
标签: java,最佳类型
资料来源: https://codeday.me/bug/2019 09 25/1816482.html