2016-11-26 64 views
-1

我知道,當與Java中的操作符以及不同的數據類型有關時,結果是推廣到更大的數據類型 因此,因爲double大於float,所以當例如具有不同的數據類型操作double-float

double z=39.21; 
float w=2.1F; 
System.out.println(z+w); 

結果z + w將是雙重類型。 如果我不把浮點數據類型放在F上,那麼浮點數假定爲雙精度浮點數。

那麼爲什麼下面的代碼不能編譯?

double z=39.21; 
float w=2.1; 
System.out.println(z+w); 

不應該只是雙倍的結果,如果z和w都認爲是雙重的? 相反,它拋出:

Arithmetic.java:26: error: incompatible types: possible lossy conversion from double to float 
float w=2.1; 
     ^
1 error 

此外,當

short x = 14; 
float y = 13; 
double z = 30; 
System.out.println(x * y/z); 

首先,短期被轉換成int。然後int被轉換爲Float。然後發生乘法。

爲什麼在這種情況下編譯,因爲我們有一個雙精度和浮點數之間的操作沒有F ??????

我似乎無法理解這種情況,你能幫助我嗎?

回答

1
float w = 2.1; // error 

通過默認,2.1是一個雙重的文字。

編譯器希望從您身邊獲得一個保證,即您已準備好執行縮小轉換,這就是爲什麼它需要在字面值之後使用F(或f)。

如果您不把F(或f),它會導致編譯錯誤。

float y = 13; // works successfully. 

而在另一種情況下,13是一個整數文字。所以,它很容易進入浮動類型。因此,代碼成功運行。

相關問題