gpt4 book ai didi

Java 为什么不加宽 - 然后 - 框?

转载 作者:行者123 更新时间:2023-11-29 09:00:53 26 4
gpt4 key购买 nike

我知道有很多问题与这个非常相似,但请原谅我的无知,我还是不明白:(
为了向后兼容,Java 编译器选择加宽而不是装箱。
但是为什么Java在做二次转换的时候选择box-then-widen呢?

public class OverloadingTest1 {

public static void go(Long x){
System.out.println("OverloadingTest1.go(Long x) : " + x.longValue());
}

public static void main(String[] args){

byte i = 5;

go(i);
}

当然,这会编译失败,因为即使 Java 编译器加宽然后装箱,因为它不会通过 IS-A 测试(Short/Integer is not Long)。
但是如果我把代码改成这个呢?

public static void main(String[] args){

int i = 5;

go(i);
}

如果 Java 编译器选择了 widen-then-box,它可以工作,但在 Java 中,你可以 box-then-widen,而不是 widen-then-box。

我的问题是,为什么在进行一次折叠转换时突然选择先装箱然后加宽它选择加宽而不是装箱?
一定是有原因的,对吧?
我想我看到了一些可能与政策不一致的地方。
但当然,我相信 Java 人员心里有一些我还不明白的东西。

最佳答案

我认为这与设计决策有关,以确保旧代码继续与新的 Java 版本一起工作。 Java 在装箱之前进行了扩展,因此必须以不破坏现有代码逻辑的方式添加装箱机制。

可以在这里找到稍微更彻底的答案:SCJP: can't widen and then box, but you can box and then widen

关于Java 为什么不加宽 - 然后 - 框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17565452/

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