0
点赞
收藏
分享

微信扫一扫

java关于Integer设置-128到127的静态缓存

凌得涂 2022-03-30 阅读 71


今天在一个java群里,看到有个群友问到如下为什么第一个为true,第二个为false。  

System.out.println(Integer.valueOf("50")==Integer.valueOf("50"));   //true
System.out.println(Integer.valueOf("200")==Integer.valueOf("200"));  //false


  由于一开始他问的第二句,我还想当然的以为是new的对象,肯定不一样,但是为什么第一句为true呢,后来通过查找资料发现

  1、​​https://www.zhihu.com/question/29879295/answer/102396251​​  

 ​java关于Integer设置-128到127的静态缓存_sed

/**
* Returns a <tt>Integer</tt> instance representing the specified
* <tt>int</tt> value.
* If a new <tt>Integer</tt> instance is not required, this method
* should generally be used in preference to the constructor
* {@link #Integer(int)}, as this method is likely to yield
* significantly better space and time performance by caching
* frequently requested values.
*
* @param i an <code>int</code> value.
* @return a <tt>Integer</tt> instance representing <tt>i</tt>.
* @since 1.5
*/
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}

java关于Integer设置-128到127的静态缓存_sed_02


java关于Integer设置-128到127的静态缓存_sed_02

private static class IntegerCache {
static final int high;
static final Integer cache[];

static {
final int low = -128;

// high value may be configured by property
int h = 127;
if (integerCacheHighPropValue != null) {
// Use Long.decode here to avoid invoking methods that
// require Integer's autoboxing cache to be initialized
int i = Long.decode(integerCacheHighPropValue).intValue();
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - -low);
}
high = h;

cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
}

private IntegerCache() {}
}

java关于Integer设置-128到127的静态缓存_sed_02

  valueOf会将常用的值(-128 to 127)cache起来。当i值在这个范围时,会比用构造方法Integer(int)效率和空间上更好。



梅花香自古寒来


举报

相关推荐

0 条评论