short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile
代碼是什麼編譯失敗的原因是什麼? x
+ x
總是生產Integer
或大Number
,但爲什麼?
short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile
代碼是什麼編譯失敗的原因是什麼? x
+ x
總是生產Integer
或大Number
,但爲什麼?
沒有一個二元運算符會產生Integer
。但是,它將使用int
而不是較短的類型,byte
,short
和char
如果編譯器可以內聯該值,它可以爲您的值賦予值。例如
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億美元的誤差。
+1:已學習今天的東西:) –
+1。我也是。謝謝:) –
@MartijnCourteaux歡呼聲。 –
因爲語言設計師決定如此。你想要JLS的報價嗎? –
我聽說這不是在JLS中指定的。 – MariuszS
重複的副本:http://stackoverflow.com/questions/18100785/short-plus-short-is-an-int和http://stackoverflow.com/questions/1660856/promotion-in-java –