gpt4 book ai didi

java - 如何重载使用其他数据类型参数运行的方法?

转载 作者:行者123 更新时间:2023-12-02 06:41:48 25 4
gpt4 key购买 nike

我有一个简短的程序来测试java中的重载方法。这是我的代码:

public static void main(String[] args) {
// TODO code application logic here
// Case 1
f2(5);
// Case 2
char x = 'a';
f2(x);
// Case 3
byte y = 0;
f2(y);
// Case 4
float z = 0;
f2(z);
}

还有我的方法:

public static void prt(String s) {
System.err.println(s);
}

public static void f2(short x) {
prt("f3(short)");
}

public static void f2(int x) {
prt("f3(int)");
}

public static void f2(long x) {
prt("f5(long)");
}

public static void f2(float x) {
prt("f5(float)");
}

这是结果:

f3(int)
f3(int)
f3(short)
f5(float)

我不明白案例 2 和案例 3 是如何运行的。能给我解释一下吗?

最佳答案

重载方法的方法调用将根据类型参数和您传递的实际类型调用最具体的方法。

方法调用转换遵循以下路径:

  • 身份转换:首先会搜索精确匹配的方法。如果找到,它将被调用。从一种类型到相同类型的转换。
  • 拓宽基元转换:如果没有精确匹配的方法,则根据实参到格式类型参数的拓宽转换来选择方法。

还有其他一些,但不适用于此处。请参阅JLS 5.3 for Method Invocation Conversion .

因此,对于 f2(x); 由于 char 类型没有完全匹配,因此方法 f2(int) 是调用,因为 char 可通过扩展转换转换为的最具体类型是 int不,charshort 不是扩大转换。

同理,对于f2(y),没有完全匹配byte类型,因此调用方法f2(short) ,因为 shortbyte 可以扩展到的最具体的类型。

参见JLS 5.1.2 for Widening Primitive conversions :

19 specific conversions on primitive types are called the widening primitive conversions:

  • byte to short, int, long, float, or double
  • short to int, long, float, or double
  • char to int, long, float, or double

关于java - 如何重载使用其他数据类型参数运行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075911/

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