gpt4 book ai didi

java - 扩大和装箱 Java 原语

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:53 26 4
gpt4 key购买 nike

扩展和装箱 Java 原语。

我知道不可能将包装类从一个扩展到另一个,因为它们不是来自同一继承树。为什么不能将基元扩展为另一种基元类型并自动装箱扩展的基元?

鉴于可以将字节参数传递给需要 int 的方法,为什么不能将以下示例中的字节扩展为 int,然后装箱为 Integer?

class ScjpTest{
static void goInteger(Integer x){
System.out.println("Going with an Integer");
}

static void goInt(int x){
System.out.println("Going with an int");
}

public static void main(String args[]){
byte b = 5;
goInt(b);
goInteger(b);
}
}

在上面的示例中,goInt(b) 被编译器接受,但 goInteger(b) 被拒绝。

最佳答案

简答

java语言只支持某种程度的粗心。

更长的答案

我相信添加自动装箱是为了支持开发人员的粗心大意。特别是在这样的情况下:“我需要一个 Integer 作为我想调用的方法的参数,但我有一个 int。不知何故, new Integer(int) 永远不会出现在我的脑海中。相反,我只会发送一个 int Java 编译器将为我执行新的 Integer() 调用。感谢 Java 粗心支持组!”

设计自动装箱的人愿意支持 1 级粗心(int => Integer 和 back),但不愿意支持将较小的原始类型自动转换为较大的原始类型以及从原始类型自动创建和提取包装类。我怀疑这个决策矩阵会比当前自动装箱方案的决策矩阵大一些。

关于java - 扩大和装箱 Java 原语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7014171/

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