Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中关于int/long和String/object参数的方法重载_Java_Overloading - Fatal编程技术网

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

java中关于int/long和String/object参数的方法重载,java,overloading,Java,Overloading,对于下面的程序,为什么调用具有int和String参数的方法而不是long和Object 想知道为什么编译器选择int而不是long和String而不是Object参数 注:这是在一次采访中提出的 public class MethodOverloadingTest { public static void add(int n, int m){ System.out.println("Int method"); System.out.println(n+

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

想知道为什么编译器选择int而不是
long
String
而不是
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)
方法,您正在传递整数,这就是调用整数的原因。
对于
方法(null)
,选择最具体的方法参数。在这种情况下,
String
Object
更具体。因此
方法(字符串st)被调用。

这个概念被称为早期绑定。大多数特定的方法(基于参数)是在编译时选择的

Object
是java中最不特定的类,因为它是所有类中的超级类

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

其选择方式在此处指定的规则集中给出


这很简单,因为Java默认将数字视为int,将字母视为字符串对象,而不是一般对象

因此,当您传递add(2,3)时,它将参数作为正常int 要调用add(long,long),请将参数传递为添加(2.0,4.0)类似的内容。和用于调用函数方法(对象)

1.首先键入将字符串强制转换为键入对象 字符串str; str=(对象)“你好世界”


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

不,这不是面试必须寻找的完整且完全正确的答案。@Khay我想你已经知道答案,你正在测试这里的所有人。是的-使用add(2L,3L);用long或method((Object)null)调用它:]Rafa El的评论得到了支持,但它是错误的。编译器不会选择它找到的第一个方法;它选择适合参数的最具体的方法。试着在课堂上把这些方法按不同的顺序排列,你会发现这并不重要。可能是因为它很有趣,所以被选上了。它不是“有趣”,只是错了。然后会选择最具体的方法。如果你想知道确切的规则,就去查一下。哦!现在我想起来了,其实我在高中时就学会了!。我真丢脸。