gpt4 book ai didi

java - 隐式类型转换不适用于方法参数?

转载 作者:太空狗 更新时间:2023-10-29 22:55:59 25 4
gpt4 key购买 nike

考虑以下代码片段:

class TypeCast{
public static void main(String[] args){
byte by = 4; //compiler casts int literal to byte

doCasting(4); //Compilation Error: external type casting is required. WHY ?

}

public static void doCasting(byte by){

}

}

我认为上面的代码片段是不言自明的。当 int 文字分配给 byte 类型时,编译器会自动执行所需的转换。当我们调用一个带有 int 字面量的 byte 参数的方法时,不会发生同样的事情。为什么?

最佳答案

这是用于转换的赋值上下文 ( JLS 5.2 ) 和调用上下文 ( JLS 5.3 ) 之间的区别。

赋值上下文转换包括:

In addition, if the expression is a constant expression (§15.28) of type byte, short, char, or int:

  • A narrowing primitive conversion may be used if the type of the variable is byte, short, or char, and the value of the constant expression is representable in the type of the variable.

调用上下文转换中存在。

除了可能简化重载决策之外,我不清楚为什么要这样设计语言 - 如果您有:

doCasting(5);
...
doCasting(int x) {}
doCasting(byte b) {}

那么你可以争论它们中的任何一个是“最佳匹配” - byte 是比 int 更具体的类型,但是如果你认为文字是int 类型,则 byte 重载需要转换,而 int 重载则不需要。

通过使 byte 重载完全不适用,问题就被删除了。

关于java - 隐式类型转换不适用于方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28405325/

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