我有两个带有参数int和long的add方法。当我打电话给#34;添加(2)" ,调用带有int参数的add方法。任何人都可以帮助这背后的逻辑。为什么不调用其他add方法。
private static void add(int a){
System.out.println("int");
}
private static void add(long b){
System.out.println("long");
}
答案 0 :(得分:7)
这是方法重载。当有多个具有相同名称的方法可用时,编译器会选择最适合所提供参数的方法。
2
是int
类型的文字,因此add(2)
会调用带有int
参数的方法。要调用采用long
的方法,请致电add(2L)
或add((long)2)
。
答案 1 :(得分:1)
这背后的概念是方法重载,在编译时检查,当您将int (2)
作为参数传递给方法add
时,它将匹配最近的方法如果存在多个add
的方法,并将给定的param与最佳匹配方法匹配,即最佳匹配参数列表。
详细了解方法重载https://docs.oracle.com/javase/tutorial/java/IandI/override.html和https://www.tutorialspoint.com/java/java_overriding.htm。
答案 2 :(得分:0)
如果可能,数字文字2
将被评估为int
类型首先。编译器总是尝试将其变为int
。如果int
无法编译,请尝试将其评估为其他类型。
所以在这里,如果您使用int
参数删除方法,2
将是long
类型。如果删除这两个重载并添加一个接受double
的重载,2
将被评估为double
类型。
如果您想明确表示要调用带long
的方法,请使用2L
或2l
之类的长文字。或者,通过(long)2
将其强制转换为长。
答案 3 :(得分:0)
默认情况下,Java会尝试将(整个)数字文字视为int值,因此将调用期望int参数的方法。
整数文字
如果整数文字以字母L或l结尾,则其长度为long; 否则它是int类型。建议您使用鞋面 大小写字母L因为小写字母l很难区分 从数字1。
请参阅Oracle Tutorial。