gpt4 book ai didi

java - SCJP:不能加宽然后装箱,但可以装箱然后加宽

转载 作者:搜寻专家 更新时间:2023-10-31 08:21:23 25 4
gpt4 key购买 nike

我正在准备 SCJP 考试,遇到了一个我无法真正解决的问题。

书上说不能先加宽再装箱,但可以先装箱再加宽。无法装箱的示例是一个需要 Long 的方法和一个字节调用的方法。

他们的解释是:

Think about it…if it tried to box first, the byte would have been converted to a Byte. Now we're back to trying to widen a Byte to a Long, and of course, the IS-A test fails.

但这对我来说听起来像是 box and then widen 和 not widen and box。

任何人都可以为我阐明整个框并加宽与加宽和框,因为就目前而言,这本书在这个问题上并不十分清楚。

编辑:澄清一下:我说的是 SCJP sun 认证的 Java 6 程序员一书的第 252 和 253 页。 http://books.google.be/books?id=Eh5NcvegzMkC&pg=PA252#v=onepage&q&f=false

最佳答案

语言困惑。

基本上你不能以这种方式进行:
字节 -> 字节 -> 长
因为 Byte 和 Long 不共享 is-a 关系。
因此,它尝试这样做:
字节 -> 长 -> 长
但它也不能这样做(显然是由于编译器的限制)。因此,它失败并引发错误。

但是,另一方面你可以这样做:
字节 -> 字节 -> 对象
因为 Byte 是一个对象。

考虑 2 个函数和一个字节变量:

toLong(长x)
toObject(对象 x)
字节 b = 5;

那么这条语句将是非法的:
到长(b);
//因为 b -> new Byte(b) -> new Long(new Byte(b)) 是非法的。
由于编译器限制,AND byte -> long -> Long 无法完成。

但是这个声明是合法的:
toObject(b);
//因为 b -> new Byte(b) -> new Object(new Byte(b)) 是合法的。

关于java - SCJP:不能加宽然后装箱,但可以装箱然后加宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3720883/

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