【发布时间】:2016-08-09 04:51:36
【问题描述】:
我知道 java(c?) 可以在必要时对类型进行装箱和拆箱以及在原始类型之间进行转换,但为什么它不想同时这样做。
例如,如果我要这样做:
ArrayList<Byte> bytes = new ArrayList<>();
bytes.add(8);
Javac 会惊慌并告诉我Collection.add(Byte) 不适用,但如果我使用ArrayList<Integer> 代替它不会有问题。
如果我会这样做byte aByte = 8; bytes.add(aByte);,它也会编译得很好。
为什么会这样,有什么好的理由吗?
【问题讨论】:
-
那是因为,您要将文字 int 转换为 byte,int = 4 个字节,而 byte 是一个字节,所以您正在下降,这里 Java 不会决定您的位置,因为您需要显式转换,因为如果您想增加(以字节为单位),可能会丢失一些数据,例如:从 int 到 double,Java 将为您执行 IMPLECIT CAST :)
标签: java javac primitive-types autoboxing syntactic-sugar