把一个String转换成int有Integer.parseInt("")
、 Integer.valueOf("")
和new Integer("")
这么几种方式,它们之间有什么区别呢?我们可以分别看一下它们的源码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
从源码中可以看出,Integer.valueOf("")
和Integer.parseInt("")
内部实现是一样的,它们之间唯一的区别就是Integer.valueOf(“”)返回的是一个Integer对象,而Integer.parseInt(“”)返回的是一个基本类型的int。
我们再看Integer.valueOf("")
和new Integer("")
,它们同样返回的是一个Integer对象,但它们又有什么区别呢?我们再进入Integer.valueOf(parseInt(s, 10) )
方法内部:
- 1
- 2
- 3
- 4
- 5
- 6
我们可以看到,Integer.valueOf("")
会用到IntegerCache
对象,当IntegerCache
中存在时就从cache中取,不存在时才会调用new Integer(i)
构造函数返回一个Integer对象。所以Integer.valueOf("")
会用到cache,其效率可能会比用构造函数new Integer(i)
高。
关于IntegerCache
,在-127~128之间的值都会被cache,所以当我们要的值位于这个区间时返回的都是同一个实例,例如:
- 1
- 2
- 3
上面程序的运行结果是:
- 1
- 2
- 3
综上所述:
- 当我们需要的是一个基本类型* int *的时候我们需要使用
Integer.parseInt()
函数 - 当我们需要的是一个Integer对象类的时候我们就是用
Integer.valueOf()
函数