关于使用int / long和String / object的参数,java中的方法重载

对于以下程序,为什么调用带有int和String参数的方法而不是long和Object?

想知道编译器为什么选择int over longString over Object参数。

注意:这是在一次采访中被问到的。

 public class MethodOverloadingTest { public static void add(int n, int m){ System.out.println("Int method"); System.out.println(n+m); } public static void add(long n, long m){ System.out.println("Long method"); System.out.println(n+m); } public static void method(String st){ System.out.println("from String method"); } public static void method(Object obj){ System.out.println("from Object method"); } /** * @param args */ public static void main(String[] args) { add(2,3); method(null); } } 

对于add(2,3)方法,您传递的是整数,这就是调用整数的原因。 对于method(null) ,选择最具体的方法参数。 在这种情况下, StringObject更具体。 因此method(String st); 被叫。

它很简单,因为Java默认将数字视为int,将字母视为字符串对象,而不是通用对象。

所以当你传递add(2,3)时,它将参数作为普通的int

调用add(long,long)传递参数为; 添加(2.0,4.0)这样的东西。 并用于调用函数方法(对象)

1.首先将你的字符串强制转换为类型对象String str; str =(object)“Hello world”;

2.然后传递给方法(str);

该概念称为早期绑定。 最具体的方法(基于参数)在编译时被选中。

Object是java中任何其他类的特定参数,因为它是所有类的超类。

如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符。 Java编程语言使用选择最具体方法的规则。

如何选择在规则集中给出,在此处指定

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5