我們平時應該都用過或者見過parseInt和valueOf這兩個方法。一般我們是想把String類型的字符數字轉成int類型。從這個功能層面來說,這兩個方法都一樣,都可以勝任這個功能。
但是,我們進入源碼,看下Integer類下這兩個方法
我們看parseInt()這個方法是如何實現的
public static int parseInt(String s) throws NumberFormatException { return parseInt(s,10); }
我們再看valueOf()是如何實現的:
public static Integer valueOf(String s) throws NumberFormatException { return Integer.valueOf(parseInt(s, 10)); }
從代碼,我們起碼看到了兩點
返回結果類型不一樣,parseInt方法返回的是int基本類型,valueOf方法返回的是Integer的包裝類型
valueOf方法實際上是調用了parseInt方法,也就是說,如果我們僅僅只需要得到字符串類型字符數值對應的整數數值,那我們大可不必調用valueOf,因為這樣得到整形數值之后還要做一個裝箱的操作,將int封裝為Integer。
不知道平時忙於編碼的你,是否有過壓根沒有時間管兩者區別,而是直接看到誰就用誰的經歷。
寫代碼測試效率:
public class StringDemo { public static void main(String[] args) { // TODO Auto-generated method stub String str = "123"; long startTime = System.currentTimeMillis(); for(int i = 0;i<100000000;i++){ Integer.parseInt(str); } long endTime = System.currentTimeMillis(); System.out.println(endTime-startTime); } }
和如下代碼:
public class StringDemo { public static void main(String[] args) { // TODO Auto-generated method stub String str = "123"; long startTime = System.currentTimeMillis(); for(int i = 0;i<100000000;i++){ Integer.valueOf(str); } long endTime = System.currentTimeMillis(); System.out.println(endTime-startTime); } }
分別測試三遍,得到的時間如下,可以看到paraseInt()的效率更好。
parseInt() | 2946 | 2965 | 2952 |
valueOf() | 3124 | 3117 | 3126 |