为什么java.lang.Integer.valueOf是一个flyweight模式? 我试图找到原因,但却没能。
答案 0 :(得分:15)
如果我们查看valueOf
的来源,我们可以得到一个提示:
Source of 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类为常用值维护了Integer对象的缓存。每次有人要求valueOf
时,它不会创建一个新的,而只是返回对已经存在的引用的引用。因此,如果多次调用Integer.valueOf(1)
,则每次都会返回相同的对象(而不仅仅是等效的对象)。
答案 1 :(得分:6)
这听起来像是你被要求解决一个练习。
如果使用相同的参数调用该方法两次,则可能返回相同的对象,从而限制了内存使用量。这符合flyweight模式的定义。