2011-05-07 21 views

回答

2

因爲當您分配數字文字時,它默認爲整數。編譯器不檢查該值以檢查精度是否會丟失。

此外,Java將執行整數運算。有關短值的更多信息,請參閱Primitive type 'short' - casting in Java

+0

它不在「short s = 2,s1 = 200,s2;」中錯誤發生的線,它是在總和。 – fbafelipe 2011-05-07 06:05:28

+0

這個答案只是錯誤的。編譯器足夠聰明,可以告訴字面值不會溢出短路,所以初始化是合法的。正如其他人已經指出的那樣,Java算術運算符將整數類型擴展爲int寬度。 Java然後需要一個強制轉換回短寬度。 – 2014-06-25 23:42:13

1

在這種情況下可出現上溢,如果32,767 < s + s1s+s1 < -32,768

-32,768 - 32,767爲短變量可能值的範圍。

+1

它是默認的返回類型值爲java中的運算符運算符是int數據類型??? – Bhadri 2011-05-07 06:04:00

+0

沒有「默認」返回類型。你簡單的可能會超出範圍,因爲一個範圍內的兩個隨機數的總和可能大於範圍本身。 – StKiller 2011-05-07 06:06:10

+0

@AndreiPodoprîgora如果我們使用'int'而不是'short',結果不會變成'long'並且需要投射;這種擴展行爲特定於小於'int'的整數類型。當然,溢出仍然是一個有效的問題,但是警告僅僅是關於截斷'int'的危險,而不是可能的溢出。 – 2014-06-25 23:49:42

2

由於兩個短褲的總和將被評估爲一個整數,因此您將一個整數分配給一個短整數。

就可以解決這個鑄造回短:

s2=(short)(s+s1); 
5

因爲爲了短褲執行算術運算,編譯器將它們首先擴大至整數:

S2 = s + s1 

實際上是

S2 = (int)s +(int)s1 

其中右側有int類型。

0

這是由於Java使用int來計算小整數;加入之後,Java抱怨由於投退而導致精度的損失。

值得注意的幾件事情:

  1. The short data type is rarely useful outside of arrays.

  2. 如果總和涉及您是分配給變量,您可以通過使用+=運營商避免顯式轉換的需要,因爲複合算術/賦值運算符都暗含對原始變量類型的轉換(如果需要的話)。

相關問題