为什么java.lang.Integer.valueOf是一个flyweight模式?

时间:2011-06-29 13:03:32

标签: java design-patterns

为什么java.lang.Integer.valueOf是一个flyweight模式? 我试图找到原因,但却没能。

2 个答案:

答案 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模式的定义。

相关问题