Java Number包装类转型:为何new Long(10)合法而Long l2=10不合法
问题解答
- 首先说明
new Long(10)合法的原因:
Java的Long类提供了参数为long基本类型的构造方法,而Java基础类型默认支持小范围类型向大范围类型的隐式拓宽转换,32位的int类型数值可以无精度损失地自动转换为64位的long类型,所以int字面量10会先隐式转为long类型,再传入构造方法生成Long对象,整步操作符合语法规则。 - 再说明
Long l2 = 10不合法的原因:
Java的自动装箱规则仅支持基础类型和它对应的包装类直接互转:int只能直接装箱为Integer,long只能直接装箱为Long,语法不允许「int拓宽为long + long装箱为Long」两步隐式转换同时执行,因此直接把int类型的10赋值给Long类型变量会编译报错。
如果要让这个赋值语句合法,只要把字面量标记为long类型即可:Long l2 = 10L;
内容的提问来源于stack exchange,提问作者EuginK
相关产品推荐
相关产品推荐

