为什么java.lang.Integer.valueOf是一个享元模式? 我尝试找到原因,但没有成功。
为什么java.lang.Integer.valueOf是一个享元模式? 我尝试找到原因,但没有成功。
如果我们查看valueOf
的源代码,就可以得到一些提示:java.lang.Integer的源代码第638-643行:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
看起来Integer类维护了一个整数对象缓存,用于常见值。不是每次有人调用valueOf
时都创建一个新的对象,而是返回一个已经存在的对象的引用。因此,如果多次调用Integer.valueOf(1)
,每次都会得到相同的对象(而不仅仅是等价对象)。
new Integer(1)
? - Simon Kuang-XX:AutoBoxCacheMax=<size>
赋值来更改正缓存的大小。但是,您无法更改负缓存的大小。 - Bill Naylor听起来你被要求解决一道练习。
如果你用相同的参数两次调用该方法,它可能会返回相同的对象,从而限制内存使用。这符合享元模式的定义。
sun.misc.unsafe
模块)。我想理论上您可以使用相同的方法来更改IntegerCache.low
字段。 - Bill Naylor