5

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

4

2 回答 2

4

Java 字符串常量的实习池对于 Java 编译器来说是已知的,因此您无法自己模仿确切的行为。

然而,池本身只不过是一个哈希映射。如果你的对象有一个合适的标识符,你当然可以为你自己的对象滚动一个池:只需创建一个静态方法,它接受一个键,在静态哈希映射中查找它,并且只有在它没有被池化时才构建一个新对象然而。但是请注意,为了使这个简单的方案起作用,您的对象必须是不可变的。

于 2013-03-15T10:21:09.297 回答
3

字符串池并不是Java中唯一的池/缓存,Integer等包装类使用缓存,可以以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//

于 2013-03-15T10:21:00.863 回答