黑马程序员技术交流社区
标题:
函数重载的问题
[打印本页]
作者:
为你而去
时间:
2014-4-8 00:12
标题:
函数重载的问题
Overloading1.java无法通过编译,但Overloading2.java却顺利通过编译。这是为什么?
public class Overloading1 {
static void f(float i, Character... args) {
System.out.println("first");
}
static void f(Character... args) {
System.out.print("second");
}
public static void main(String[] args) {
f(1, 'a');
f('a', 'b');
}
}
public class Overloading2 {
static void f(float i, Character... args) {
System.out.println("first");
}
static void f(char c, Character... args) {
System.out.println("second");
}
public static void main(String[] args) {
f(1, 'a');
f('a', 'b');
}
}
输出:
first
second[/code]
作者:
jingdou56
时间:
2014-4-8 01:03
问题都在 f('a','b') 这句上!
因为'a'对应的ASCII 值是 97,所以编译也认为'a'是 97.0,
所以 java 编译器在编译时,Overloading1 中 f('a','b') 这句,两个方法的优先级是一样的(个人理解,也不知道这样说对不对)java 编译器不能识别它对应的到底是哪个方法!
所以就会报错了!
Overloading2 中有 char 类型的参数,所以直接对应的是就是第二个方法
作者:
linweiwen
时间:
2014-4-8 01:21
就是楼上说的那句错了,
编译的时候有"歧义",
f((float)'a', 'b');
这样写才能消除歧义。
当然你改其他地方,反正就是类型对了就可以了,
感觉深究这种错误,有点死扣啊。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2