码迷,mamicode.com
首页 > 其他好文 > 详细

Integer类的parseInt和valueOf的区别

时间:2017-07-28 20:53:46      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:void   integer   方法   ret   ted   包装类   static   源码   demo   

我们平时应该都用过或者见过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的区别

标签:void   integer   方法   ret   ted   包装类   static   源码   demo   

原文地址:http://www.cnblogs.com/LoganChen/p/7252419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!