由于jvm为字符串管理字符串池,从中查找任何新的String赋值,同样,我们是否可以开发任何其他对象或基元的池?是否可以创建类似于字符串的对象池?
5
A
回答
4
Java String常量的实习池是Java编译器已知的,因此您无法亲自模拟确切的行为。
然而,池本身不过是一个哈希映射。如果你的对象有一个合适的标识符,你当然可以为你自己的对象滚动一个池:简单地创建一个静态方法,该方法需要一个键,在静态哈希映射中查找它,并且只有在没有合并时才构建一个新对象然而。但是,请注意,在这个简单的方案工作,你的对象是不可改变的。
3
字符串池是不是在Java中,整数和其他包装类的唯一池/缓存使用缓存,你可以去看看整数源代码为例
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);
}
相关问题
- 1. Java字符串池对象创建
- 2. 是否可以在不创建新的String对象的情况下访问Java字符串的子字符串?
- 3. 创建字符串对象
- 4. string.toUppercase()在堆或字符串池中创建一个新对象
- 5. 是否可以根据用户的输入创建类对象?
- 6. 是否可以将字符串转换为对象的引用?
- 7. XCode是否为所有空字符串创建一个对象?
- 8. 是否可以根据表示其类型的字符串值创建对象实例?
- 9. 是否可以使用符号键创建一个const对象?
- 10. 是否可以为接口类型创建对象
- 11. 是否可以在Doxygen中创建自定义对象类型?
- 12. 是否可以从base64字符串创建一个pdf文件?
- 13. 是否可以创建多行字符串?
- 14. 是否可以在PHP中实现类似数组的对象?
- 15. 是否可以流入TextBox或类似的控制对象?
- 16. 是否可以在CSS3中创建类似的阴影?
- 17. 在创建字符串对象时创建了多少对象
- 18. 创建SQLXML对象,而不是字符串对象
- 19. 是否可以根据字符串中字符的频率创建数组?
- 20. 是否可以将Json加载到类似于XElement的持有者对象?
- 21. 如何检查_bstr_t是否包含(类似于str.find)字符串
- 22. 创建从瑟茜JSON对象,其中值可以是字符串或列表
- 23. 字符串常量池对象cardianality
- 24. Flyweight:字符串已经在使用字符串池:是否有意义为Flyweight缓冲字符串对象?
- 25. 从字符串创建对象
- 26. 从字符串创建函数对象
- 27. 从JSON字符串创建BSON对象
- 28. 从字符串创建表对象
- 29. 创建JSON对象或字符串..?
- 30. 基于字符串值构建对象
所以基本上保持一个静态哈希映射将复制池。对? ,这意味着池式字段的数量更少,缓存会更有效/更高效? – Ankit 2013-03-15 10:28:22
@ ay89通常,只有当您创建的对象之间存在大量重复时,池才会有效。您可以拥有一个包含代表客户的30个字段的对象,以及他的地址,电话号码等。如果您只有100个客户,那么即使拥有大量字段的班级,您的集合也将非常有效。另一方面,如果您尝试使用代表2D坐标(整数对)的类来合并类,并将其用于一组10,000个随机生成的坐标,则缓存将不会有效,即使只有两个领域。 – dasblinkenlight 2013-03-15 10:35:10
好的,但是如果有更多的字段数量较多的重复对象,那么就内存而言,池化将是有效的。但同时,我认为,它会消耗更多的时间,比较大量的字段来决定对象是否重复。对? – Ankit 2013-03-15 10:46:11