一尘不染

什么是Java字符串池?“ s”与新的String(“ s”)有何不同?

java

字符串池是什么意思?以下声明之间有什么区别:

String s = "hello";
String s = new String("hello");

JVM存储这两个字符串之间有什么区别吗?


阅读 412

收藏
2020-02-25

共1个答案

一尘不染

字符串池是JVM对字符串实习概念的特定实现:

在计算机科学中,字符串保留是一种仅存储每个不同的字符串值的一个副本的方法,该值必须是不变的。内部字符串使某些字符串处理任务更加节省时间或空间,但代价是在创建或嵌入字符串时需要更多时间。不同的值存储在字符串内部存储池中。

基本上,字符串内部存储池允许运行时通过在池中保留不可变的字符串来节省内存,以便应用程序的区域可以重用公共字符串的实例,而不是为其创建多个实例。

有趣的是,字符串实习是flyweight设计模式的一个示例:

Flyweight是一种软件设计模式。flyweight是通过与其他类似对象共享尽可能多的数据来最大程度减少内存使用的对象。当简单的重复表示使用不可接受的内存量时,这是一种大量使用对象的方法。

2020-02-25