2014-01-17 78 views
4

我有這樣爲什麼在Java中加運算符總是產生Integer?

short a = 1; 
short b = 2 ; 
short c = a + b; // dosen't compile 

代碼是什麼編譯失敗的原因是什麼? x + x總是生產IntegerNumber,但爲什麼?

+7

因爲語言設計師決定如此。你想要JLS的報價嗎? –

+0

我聽說這不是在JLS中指定的。 – MariuszS

+1

重複的副本:http://stackoverflow.com/questions/18100785/short-plus-short-is-an-int和http://stackoverflow.com/questions/1660856/promotion-in-java –

回答

20

沒有一個二元運算符會產生Integer。但是,它將使用int而不是較短的類型,byteshortchar如果編譯器可以內聯該值,它可以爲您的值賦予值。例如

final short a = 1; 
final short b = 2; 
short c = a + b; // does compile, because of constant inlining. 

產生一個Integer的唯一操作者是鑄造。

Integer i = (Integer) 1; 

順便說一句:在異類是Java 32位float定義爲比64位long值「寬」。這有一個缺點,即float的精度要低得多。考慮這一點。

long l = 7777777777777777777L; 
l += 0.0f; 
System.out.println(l); 

打印

7777777579364188160 

即使0.0F加入l它被隱式轉換爲float(如浮法更寬),然後轉換回(如,使用操作者分配),從而產生一個200億美元的誤差。

+3

+1:已學習今天的東西:) –

+1

+1。我也是。謝謝:) –

+0

@MartijnCourteaux歡呼聲。 –