因为jvm管理String的字符串池,从中查找任何新的String赋值,类似地,我们可以开发任何其他对象或原语的池吗?
答案 0 :(得分:4)
Java String常量的实习池是Java编译器已知的,因此您无法自己模仿确切的行为。
然而,池本身只不过是一个哈希映射。如果你的对象有一个合适的标识符,你当然可以为你自己的对象滚动一个池:只需创建一个静态方法,它接受一个键,在静态哈希映射中查找它,并且只有在没有被池化时才构建一个新对象然而。但请注意,要使这个简单的方案起作用,对象必须是不可变的。
答案 1 :(得分:3)
字符串池不是Java中唯一的池/缓存,整数和其他包装类使用缓存,你可以看一下Integer源代码作为例子
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);
}