1. 程式人生 > >Java中Integer的最大值和最小值

Java中Integer的最大值和最小值

Q1:誰能給解釋一下,這兩個常量為什麼會分別定義成0x800000000x7fffffff
Q2
java.lang.String的最大長度是多少?
Q3
:如下程式碼能丟擲異常嗎?為什麼

int x = Integer.MAX_VALUE+10;
if(x >= Integer.MAX_VALUE || x <= Integer.MIN_VALUE){
 //throw exception
}

Q1:

四位元組的整形有符號是-2^31~2^31-1 ;在計算機內部數值的二進位制表示,有正碼、反碼和補碼。一般採用二進位制補碼進行表示和運算,MIN_VALUE = 0x80000000MAX_VALUE = 0x7fffffff
就是補碼錶示的Integer的最小值(-2^31)和最大值(2^31-1)。至於為什麼採用補碼錶示,簡單的說就是方便運算,詳細可自行Google一下或找本基礎教材翻一下。至於Integer的最大值最小值為什麼是這兩個數,這是因為Java語言規範規定int型為4位元組,不管是32/64位機器,這就是其所宣稱的跨平臺的基礎部分。

Q2:

   #String的關鍵欄位
   /** The value is used for character storage. */
    private final char value[];
    /** The offset is the first index of the storage that is used. */
    private final int offset;
    /** The count is the number of characters in the String. */
    private final int count;
    /** Cache the hash code for the string */
    private int hash; // Default to 0

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

Q3:

intx = Integer.MAX_VALUE+10;x溢位了,x實際為-2^31+9if條件不成立,不會丟擲異常。

上述程式碼不會丟擲異常,對於超出表示範圍的數值,採取的策略是截斷效應,即直接擷取低位,拋棄超出範圍的高位資訊,這就是所謂的溢位。例如int型的運算結果若超出表示範圍,則直接擷取低32(Q1

4個位元組)作為運算結果。由此,上述程式碼第1行會溢位,溢位後的結果導致第2行的條件判斷為假。