簡體   English   中英

Java中關於帶有int / long和String / object的參數的方法重載

[英]Method overloading in java regarding arguments with int/long and String/object

對於以下程序,為什么要調用具有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)方法,您要傳遞整數,這就是為什么要調用整數的原因。 對於method(null) ,選擇最具體的方法參數。 在這種情況下, StringObject更具體。 因此method(String st); 被叫。

該概念稱為“早期綁定”。 最具體的方法(基於參數)是在編譯時選擇的。

Object是java中最具體的類,因為它是所有類的超類。

如果多個成員方法既可訪問又可應用於方法調用,則必須選擇一個成員方法來為運行時方法分派提供描述符。 Java編程語言使用選擇最具體方法的規則。

選擇方式在規則集中給出,此處指定

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

這很簡單,因為Java默認將數字視為int,將字母視為字符串對象,而不是通用對象。

因此,當您傳遞add(2,3)時,它將參數作為普通int

調用add(long,long)將參數傳遞為; add(2.0,4.0)像這樣。 並用於調用函數method(object)

1.首先對您的字符串進行類型轉換以鍵入對象String str; str =(對象)“ Hello world”;

2.然后傳遞給方法(str);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM