gpt4 book ai didi

Java 不会同时装箱和转换基本类型

转载 作者:行者123 更新时间:2023-12-01 18:05:37 25 4
gpt4 key购买 nike

我知道 java(c?) 可以对类型进行装箱和拆箱,并在必要时在基本类型之间进行转换,但为什么它不想同时执行这两个操作。

例如,如果我要这样做:

ArrayList<Byte> bytes = new ArrayList<>();
bytes.add(8);

Javac 会 panic 并告诉我 Collection.add(Byte)不适用,但我是否可以使用 ArrayList<Integer>相反,这不会成为问题。如果我愿意 byte aByte = 8; bytes.add(aByte);它也可以很好地编译。

为什么会这样,有什么充分的理由吗?

最佳答案

发生这种情况的原因是,如果执行 bytes.add(8),8 会被作为 int 处理。所以会抛出以下错误:

The method add(Byte) in the type ArrayList < Byte> is not applicable for the arguments (int)

如果你想将 8 直接添加到 ArrayList 中,你必须将 8 转换为一个字节

bytes.add((byte)8);

在必要时不可能将 8 作为 byte 处理,而在其他情况下则作为 int 处理。

考虑以下示例:

private static void test() {
Object o = 8;
}

现在,如果您想要 8 作为 byte 还是 int,则不会指定。因此数字总是作为整数处理,而不是作为字节处理。因此 JVM 可以将 8 装箱到正确的包装类中。在此示例中,o.getClass()java.lang.Integer

小数也是如此,例如2.3 被定义为 double 型,如果您希望 2.3 作为 float ,则必须编写 2.3f

关于Java 不会同时装箱和转换基本类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36677233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com