2015-12-12 36 views
3

比方說,我有2個方法是這樣的:重載方法調用Java中

1 public int sum(int a, int b) { return a + b; } 

2 public double sum(double a, double b) { return a + b; } 

如果我打電話總和,像這樣:sum(2, 3) 第一種方法會被執行

如果我打電話總和,像所以:sum(2.5,3.5)執行第二種方法

但是,如果我調用像這樣的總和:sum(2.5,3),第二種方法是執行,但不是第一種,爲什麼?

另外,如果總數被稱爲是這樣的話,情況也會如此:sum(3,2.5)

+1

是的,因爲編譯器會將文字2(或3)提升爲double。 – pvg

+1

你也可以在整數的末尾加上一個小寫的'd'來將它們投入雙打,比如'1d' ......與你分享一件奇怪的事情 – ThisClark

+0

@ThisClark +1,直到現在我才知道現在!感謝分享 :) –

回答

4

編譯器會將int變成一個double,調用第二個方法這是因爲int可以被轉換爲double,但反之亦然。

這將適用於所有的基本類型向右。 除非明確指出,否則你不能去左邊,你不這樣做。如果你想要執行第一個方法,你只需要將類型轉換爲int類型,這樣它就不會變成double類型。 Java是非常具體的關於這些事情:

所以,總而言之,當你調用方法沒有類型轉換的整型,這樣做:

sum(int, double); 

實際上是翻譯成這樣:

sum(double, double); 

爲了避免出現這種情況,你必須將你的int類型轉換爲int類型。

2

因爲,整數 s可以作爲浮點數在數學。 因此,sum(3,2.5) - 這裏值得的方法簽名是sum(double, double)