Integer类的parseInt和valueOf的区别
我们平时应该都用过或者见过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 |
心再坚强也不要独自飞翔