Java:为什么我不能将int转换为Long
Java中的所有数字都应该是int类型。 以下行在Java> 1.5中是合法的
Short s = 1; // Will compile to Short s = Short.valueOf((short)1) - thus you can't exceed short max value ie Short s = 4444; // is invalid for autoboxing
相同的机制用于Integer
和Byte
实例化。 但Long的工作完全不同。 以下代码给出了编译时错误
Long l = 10;
Long使用相同的方法进行长类型的自动装箱,所以
Long l = 10L; //is valid and is translated into Long.valueOf(10L)
我不明白为什么int不能分配给Long变量。 对此事有何想法?
我认为这个问题不是关于一般的原始和包装。 问题是关于将java转换为java.lang.Long和int转换为java.lang.Short之间的区别。
JLS:“此外,如果表达式是byte,short,char或int类型的常量表达式(第15.28节):
- 如果变量的类型是byte,short或char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示。
- 如果变量的类型是:则可以使用缩小的基元转换,然后进行装箱转换:
- 字节和常量表达式的值可在类型字节中表示。
- Short和常量表达式的值可以在short类型中表示。
- 字符和常量表达式的值可在char“类型中表示。
因此,所有<= 32位基元都可以轻松投射,长(64位)需要特殊投射。 这似乎不合逻辑。
像往常一样,所有不合逻辑的东西都有解释java中的后向兼容性或历史演变。 例如,自1.0版以来,java中存在Integer和Long类。 从1.1开始,Java和Short存在于类中。 那是在起始点,整数可以是两种类型:整数或长整数。 所以我认为这两种类型的数字有不同的投射规则。 然后添加了short和byte。 我认为short和byte可以在具体的JVM中实现32位。
因为带有第一个大写字母的Long是包装类而不是原始类型。
看看这里 。
你可以将int
为long
和long
to Long
但你不能把int
为Long
写Long l = (long) 10;
是正确的Long l = (long) 10;
- exception处理,创建日志并在JAVA中继续程序
- 使用分隔每个条目的线条在toString中打印Arraylist
- CardLayout,通过ButtonClick在JPanel之间切换
- 如何缩小PDF格式的内容?
- Java“太多常量”JVM错误
- 在Spring MVC中使用Jackson JSON时,如何默认启用Pascal大小写?
- Java Jackson:反序列化复杂的多态对象模型:JsonMappingException:意外的令牌(START_OBJECT),预期的VALUE_STRING
- 如何在没有onclick事件的情况下显示richfaces模式窗口?
- 没有主要的清单属性 – IntelliJ