作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
为什么 java.lang.Integer.valueOf 是享元模式?我试图找到原因,但找不到。
最佳答案
如果我们查看 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 类为公共(public)值维护了一个 Integer 对象的缓存。不是每次有人请求 valueOf
时都创建一个新值,而是返回对已存在值的引用。因此,如果您多次调用 Integer.valueOf(1)
,您每次都会得到相同的对象(而不仅仅是等效对象)。
关于java - 为什么 java.lang.Integer.valueOf 是享元模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6521067/
据我所知,对象池是一种创建模式,享元是一种结构模式,但实际上我看不出两者之间有太大区别。有人可以向我解释它们之间的区别以及每种方法在实现中何时有用吗? 最佳答案 一个区别在于享元通常是不可变的实例,而
字符串已经在使用享元设计模式。汇集常见的 String 对象是否有益/性能好?因为字符串已经从字符串池中提取出来了吗? 最佳答案 字符串可以来自很多地方,默认情况下只有字符串文字在字符串池中。例如,当
我是一名优秀的程序员,十分优秀!