2017-09-04 68 views
6

我嘗試這個方法重載代碼和我得到了錯誤方法重載顯示「不兼容的類型錯誤」與浮動,但不與雙

找到的附加(雙,雙)

沒有合適的方法

代碼:

class Adder { 
    static float add(float a, float b) { 
     return a + b; 
    } 

    static int add(int a, int b) { 
     return a + b; 
    } 
} 

class TestOverloading1 { 
    public static void main(String[] args){ 
     System.out.println(Adder.add(11.5, 11.5)); 
     System.out.println(Adder.add(27, 21)); 
    } 
} 

上書寫,在PARAMS 11.5f,這個效果很好。

我從herehere瞭解了float和double的區別。

那麼,爲什麼Java默認將參數作爲double數據類型?這種偏差背後的雙精度是否更高?

我知道它默認情況下是雙倍的。但是,我想知道背後的原因是什麼?

+0

因爲11.5是雙。你也可以嘗試一下:new Float(11.5) – Stultuske

+2

@Stultuske建議人們使用'new Float(11.5)'是不好的建議,爲什麼在使用浮點數字時會引入一個新的包裝對象。 –

+0

這並不是真正的建議,更暗示它是一種更「可見」的測試方式,是否可以起作用 – Stultuske

回答

7

沒有任何後綴(如11.5)浮點字面通過定義是double型的(類似地字面沒有任何後綴的整數是int類型的) 。

double一個參數不在接受float參數(因爲從doublefloat鑄造可能會導致數據丟失,因此,編譯器將不執行這種自動澆鑄)的方法是可接受的。

在另一方面,11.5ffloat文字,這樣你就可以通過這樣的文字你add(float a,float b)方法。

4

Adder.add(11.5,11.5) 

相同

double a = 11.5; 
double b = 11.5; 
Adder.add(a, b) 

,這並不在靜態方法匹配參數

static float add(float a,float b){return a+b;} 

,所以你必須: 投那些文字來float:

Adder.add(11.5f, 11.5f); 

或聲明A和B作爲浮子

float a = 11.5; 
float b = 11.5; 
Adder.add(a, b) 
2

沒有任何東西的「11.5」被Java認爲是double。 您可以使用:

System.out.println(Adder.add(new Float(11.5),new Float(11.5))); 
0

這只是一個規範。就像爲什麼int在Java中具有默認值0一樣。

雙爲十進制值的默認類型:

雙:雙數據類型是一個雙精度64位IEEE 754 浮點。其值範圍超出了本討論範圍,但在Java語言規範的浮點類型,格式和值部分中進行了指定。 對於十進制值, 這種數據類型通常是默認選擇。如上所述, 此數據類型決不能用於精確值,例如 貨幣。

來源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

2

在Java中,當我們輸入十進制數爲11.5,然後它被認爲是雙。 double是64位,而float是32位,所以轉換是不可能的,這就是編譯時異常發生的原因。欲瞭解更多信息,請訪問:Primitive Data Types

相關問題