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

BOS*_*OSS 9 java design-patterns

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

ssh*_*nin 16

如果我们查看源代码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);
}
Run Code Online (Sandbox Code Playgroud)

看起来Integer类为常用值维护了Integer对象的缓存.而不是每次有人要求时都会创建一个新的valueOf,它只返回对已经存在的引用的引用.因此,如果Integer.valueOf(1)多次调用,每次都会返回相同的对象(而不仅仅是等效的对象).


Mat*_*arz 6

这听起来像是你被要求解决一个练习.

如果使用相同的参数调用该方法两次,则它可能返回相同的对象,从而限制了内存使用量.这符合flyweight模式的定义.