Java方法使用不同的参数调用

时间:2017-05-11 07:00:51

标签: java

我有两个带有参数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");
 }

4 个答案:

答案 0 :(得分:7)

这是方法重载。当有多个具有相同名称的方法可用时,编译器会选择最适合所提供参数的方法。

2int类型的文字,因此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.htmlhttps://www.tutorialspoint.com/java/java_overriding.htm

答案 2 :(得分:0)

如果可能,数字文字2将被评估为int类型首先。编译器总是尝试将其变为int。如果int无法编译,请尝试将其评估为其他类型。

所以在这里,如果您使用int参数删除方法,2将是long类型。如果删除这两个重载并添加一个接受double的重载,2将被评估为double类型。

如果您想明确表示要调用带long的方法,请使用2L2l之类的长文字。或者,通过(long)2将其强制转换为长。

答案 3 :(得分:0)

默认情况下,Java会尝试将(整个)数字文字视为int值,因此将调用期望int参数的方法。

  

整数文字

     

如果整数文字以字母L或l结尾,则其长度为long;   否则它是int类型。建议您使用鞋面   大小写字母L因为小写字母l很难区分   从数字1。

请参阅Oracle Tutorial