1. 程式人生 > >Integer類的parseInt和valueOf的區別

Integer類的parseInt和valueOf的區別

int() 方法 border 1.5 row ase eth div 返回結果

我們平時應該都用過或者見過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

Integer類的parseInt和valueOf的區別