Integer類有兩個看起來很類似的靜態方法,一個是Integer.getInteger(String),另外一個是Integer.valueOf(String)。如果只看方法名稱的話,很容易將這兩個方法的功能區分開來,還是讓我們來看看Java文檔。
Integer.getInteger(String)的功能是根據指定的名稱得到系統屬性的整數值。第一個參數將被認為是系統屬性的名稱。系統屬性可以通過 System.getProperty(java.lang.String)方法訪問得到。屬性值字符串將被解釋成一個整數,並且以表示這個值的Integer對象形式返回。可能出現的數字格式的詳細說明可以在 getProperty 的定義說明里找到。
Integer.valueOf(String)的功能是獲取給定的字符串所代表的整數。
那么就讓我來看看是否理解了:
- Integer.valueOf(String)方法假設String參數表達的是一個數值,會把該數值String轉化成Integer。也就是說, Integer.valueOf("123") 得到一個Integer對象,其值是123。
- Integer.getInteger(String)方法假設String參數是一個系統屬性數值的名稱,會讀取該系統屬性,然后把系統屬性的值轉換成一個數字。也就是說, Integer.getInteger("12345") 應該是得到 null(假設沒有名為12345的系統屬性)。
雖然這兩個方法的功能是不一樣的,但是從方法的名稱上並沒有明顯的區分開來,常常容易讓人混淆。有很多bug就是因為想使用valueOf的功能但是錯誤的使用了getInteger方法而導致的。
這是在Java語言中會產生歧義的一個糟糕的例子。另外一個糟糕的例子是Boolean.getBoolean("true")。Boolean.getBoolean(String)的功能和Integer.getInteger(String)是類似的。通常我們都不會有一個名為“true”的系統屬性,因此Boolean.getBoolean("true")通常會返回Boolean.FALSE。這里甚至比Integer.getInteger(String)還要糟糕,還不如返回一個null更容易讓人發現錯誤。
還有一個就是Integer.parseInt() 返回的是一個int的值。
parseInt
public static int parseInt(String s, int radix) throws NumberFormatException
以第二個參數所指定基數將字符串參數分析為一個帶符號的整數。除了第一個字符可以用 ASCII 的減號 '-' 來表示一個負值外,字符串中的字符必須是指定基數的數(由 Character.digit 是否返回非負值決定)。返回作為結果的整數值。
參數:
s - 包含整數的 String 。
radix - 使用的進制
返回值:
指定基數的字符串參數所表示的整數。
拋出: NumberFormatException
若該串不包含一個可分析的整數。
parseInt
public static int parseInt(String s) throws NumberFormatException
將字符串參數作為帶符號十進制整數來分析。除過第一個字符為 ASCII 字符中減號 '-' 表示的負數,字符串中的字符都必須是十進制數。
參數:
s - 串。
返回值:
十進制參數表示的整數。
拋出: NumberFormatException
若該串不包含一個可分析的整數。
例題:
設有下面兩個賦值語句:
a = Integer.parseInt(“123”);
b = Integer.valueOf(“123”).intValue();
下述說法正確的是( d )。
A、a是整數類型變量,b是整數類對象。
B、a是整數類對象,b是整數類型變量。
C、a和b都是整數類對象並且值相等。
D、a和b都是整數類型變量並且值相等。
詳細解析:
parseInt(String s )方法是類Integer的靜態方法,它的作用就是將形參 s 轉化為整數,比如:
Interger.parseInt("1")=1;
Integer.parseInt("20")=20;
Integer.parseInt("324")=324;
當然,s 表示的整數必須合法,不然是會拋異常的。
valueOf(String s )也是Integer類的靜態方法,它的作用是將形參 s 轉化為Integer對象,
什么是Integer對象,Integer就是基本數據類型int型包裝類,就是將int包裝成一個類,這樣在很多場合下是必須的。如果理解不了,你就認為int是Integer的mini版,好用了很多,但也丟失了一些功能,好了,看代碼:
Interger.valueOf("123")=Integer(123)
這時候Integer(123)就是整數123的對象表示形式,它再調用intValue()方法,就是將123的對象表示形式轉化為基本數據123
所以,選擇D
轉自:http://blog.csdn.net/mingtianhaiyouwo/article/details/51351159