【Java】Integer.parseInt() & Integer.valueOf() & new Integer()

这种题目在Java面试题中倒是经常看到,了解它们的区别有时候找bug可能还有些用。下面从源码的角度分析它们的区别。

Integer.parseInt()

如下图是parseInt(String s)和parseInt(String, int)的源码。可以看到parseInt返回的是一个int基础类型,调用了parseInt(s, 10)。

【Java】Integer.parseInt() & Integer.valueOf() & new Integer()

【Java】Integer.parseInt() & Integer.valueOf() & new Integer()

Integer.valueOf()

valueOf()有多个重载版本,常用的可能是valueOf(String)和valueOf(int),我们分别说之。

valueOf(String)

下图是valueOf(String)的源码,它返回的是Integer对象,在实现上是调用了parseInt(s, 10),然后再调用valueOf(int)。
【Java】Integer.parseInt() & Integer.valueOf() & new Integer()

valueOf(int)

下图是valueOf(int)的实现,返回的同样是Integer对象,但是注意划线的地方,内部类缓存了-128~127的Integer对象,如果数值范围在[-128, 127],则直接返回缓存的对象。否则,new一个新对象。
【Java】Integer.parseInt() & Integer.valueOf() & new Integer()

分析到这,大家应该对三者直接的区别有了一个了解。
1. parseInt返回的是基本类型int
2. valueOf返回的是Integer类型,但是如果数值范围在[-128, 127],使用缓存的对象,否则new一个新对象

例子

【Java】Integer.parseInt() & Integer.valueOf() & new Integer()

【Java】Integer.parseInt() & Integer.valueOf() & new Integer()