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

时间:2013-12-20 08:32:03

标签: java overloading

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

想知道编译器为什么选择longString 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); } } 个参数。

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

{{1}}

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

Object与java中的任何其他类相比都是最不具体的,因为它是所有类中的超类。

  

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

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

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

答案 2 :(得分:1)

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

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

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

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

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