Java int 最大值 最小值

從JDK1.0開始,Integer中就定義了MIN_VALUE和MAX-VALUE兩個常量:

/**
 * A constant holding the minimum value an {@code int} can
 * have, -2<sup>31</sup>.
 */public static final int   MIN_VALUE = 0x80000000;

/**
 * A constant holding the maximum value an {@code int} can
 * have, 2<sup>31</sup>-1.
 */public static final int   MAX_VALUE = 0x7fffffff;

Q1:誰能給解釋一下,這兩個常量爲什麼會分別定義成0x80000000和0x7fffffff。 Q2:java.lang.String的最大長度是多少? Q3:如下代碼能拋出異常嗎?爲什麼

int x = Integer.MAX_VALUE+10; if(x >= Integer.MAX_VALUE || x <= Integer.MIN_VALUE){ //throw exception} Q1:計算機能理解的東西是二進制的01串。在計算機內部數值的二進制表示,有正碼、反碼和補碼。一般採用二進制補碼進行表示和運算,MIN_VALUE = 0x80000000 和 MAX_VALUE = 0x7fffffff 就是補碼錶示的Integer的最小值(-2^31)和最大值(2^31-1)。至於爲什麼採用補碼錶示,簡單的說就是方便運算,詳細可自行Google一下或找本基礎教材翻一下。至於Integer的最大值最小值爲什麼是這兩個數,這是因爲Java語言規範規定int型爲4字節,不管是32/64位機器,這就是其所宣稱的跨平臺的基礎部分。

Q2:String的最大長度取決於其內部數據表示。String內部是通過char數組表示,數組的長度在Java中限制爲一個int型所能表示的最大值,即Q1中的 MAX_VALUE = 0x7fffffff 。這點通過其內部表示偏移量int offset和長度int count的屬性可以體現。

Q3:上述代碼不會拋出異常,對於超出表示範圍的數值,採取的策略是截斷效應,即直接截取低位,拋棄超出範圍的高位信息,這就是所謂的溢出。例如int型的運算結果若超出表示範圍,則直接截取低32位(Q1中4個字節)作爲運算結果。由此,上述代碼第1行會溢出,溢出後的結果導致第2行的條件判斷爲假。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章