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