是否可以创建类似于字符串的对象池?

时间:2013-03-15 10:15:39

标签: java

因为jvm管理String的字符串池,从中查找任何新的String赋值,类似地,我们可以开发任何其他对象或原语的池吗?

2 个答案:

答案 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);
}

您还可以查看http://commons.apache.org/proper/commons-pool//