加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:为什么我不能将int转换为Long

发布时间:2020-12-14 17:48:16 所属栏目:Java 来源:网络整理
导读: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 i.e.Short s = 4444; // is invalid for autoboxing 相同的机制用于整数和字节
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 i.e.
Short s =  4444; // is invalid for autoboxing

相同的机制用于整数和字节实例化.但Long的作品完全不一样.以下代码给出编译时间错误

Long l = 10;

长时间使用相同的方法来自动装箱长型,所以

Long l = 10L; //is valid and is translated into Long.valueOf(10L)

我看不到为什么int不能分配给Long变量.对这件事有什么想法?

解决方法

我认为这个问题并不是关于一般铸造原始和包装物.
问题是将int转换为java.lang.Long和int到java.lang.Short之间的区别.

JLS:
“另外,如果表达式是byte,short,char或int类型的常量表达式(§15.28):

>如果变量的类型为byte,short或char,则可以使用变窄的原语转换,并且常量表达式的值可在变量的类型中表示.
>如果变量的类型为:可以使用缩进的原语转换,然后进行拳击转换

>字节和常量表达式的值可以在类型字节中表示.
> Short和常量表达式的值可以在类型short中表示.
>字符和常量表达式的值可以在类型char“中表示.

因此,所有< = 32位元素可以轻松地投射(64位),需要特殊的投射.
这似乎是不合逻辑的.

像往常一样的不合逻辑的事情在java的落后兼容性或历史演变中都有解释.例如. Class Integer和Long从1.0版本开始就存在于java中. Class 1.1中存在Java和Java类.那就是起点整数可以是两种类型:整数或长.所以我认为这两种类型的数字有不同的投射规则.然后添加短和字节.我想短和字节可以在具体的JVM中有32位的实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读