【发布时间】:2013-12-17 10:43:09
【问题描述】:
Long ll = 102; // Error
Byte bb = 101; // No error
为什么Long 赋值会导致编译时错误,而Byte 赋值没问题?
Long ll = 102 导致编译器错误“类型不匹配:无法从 int 转换为 Long”。我假设编译器会将 102 扩大到 long,然后框到 Long。
但它没有发生。
但是Byte bb = 101; 没有产生编译器错误。在这里我猜,101 缩小到byte(非长整数常数),然后装箱到Byte。
收窄没问题,加宽有什么问题?
【问题讨论】:
-
顺便说一句
Long ll = 102L;会工作 -
谢谢。我知道更改代码以避免编译器错误,但我想了解编译器的行为。
-
顺便说一句,如果可以使用原语,请不要使用对象/包装器,它们更简单、更快。
-
这种类型的代码是为了考试准备而不是生产代码。
-
@PeterLawrey 对象包装器在 null 是有效值时很有用。我更喜欢使用它而不是 -1 等标记值。
标签: java