什么是Java字符串池以及“s”是什么?与新String(“s”)不同? [英] What is the Java string pool and how is "s" different from new String("s")?
问题描述
String Pool 是什么意思?以下声明之间有什么区别:
What is meant by String Pool? And what is the difference between the following declarations:
String s = "hello";
String s = new String("hello");
JVM存储这两个字符串之间有什么区别吗?
Is there any difference between the storing of these two strings by the JVM?
推荐答案
字符串池是JVM对 string interning :
在计算机科学中,字符串实习
是一种存储方法每个不同的字符串值只有一个副本
,
必须是不可变的。实习字符串
使得一些字符串处理任务
在创建或实现
字符串时需要更多时间的
成本更具时间或空间效率。
不同的值存储在字符串
实习池中。
In computer science, string interning is a method of storing only one copy of each distinct string value, which must be immutable. Interning strings makes some string processing tasks more time- or space-efficient at the cost of requiring more time when the string is created or interned. The distinct values are stored in a string intern pool.
基本上,字符串实习池允许运行时通过保留池中的不可变字符串来节省内存,以便应用程序的区域可以重用常见字符串的实例而不是创建它的多个实例。
Basically, a string intern pool allows a runtime to save memory by preserving immutable strings in a pool so that areas of the application can reuse instances of common strings instead of creating multiple instances of it.
作为一个有趣的方面请注意,字符串实习是 flyweight设计模式的一个示例:
As an interesting side note, string interning is an example of the flyweight design pattern:
Flyweight是一个软件设计
模式。 flyweight是一个对象,
通过与其他
类似对象共享
尽可能多的数据来最小化内存使用;当一个简单的
重复表示将使用
不可接受的内存量时,它是一种大量使用
对象的方法。
Flyweight is a software design pattern. A flyweight is an object that minimizes memory use by sharing as much data as possible with other similar objects; it is a way to use objects in large numbers when a simple repeated representation would use an unacceptable amount of memory.
这篇关于什么是Java字符串池以及“s”是什么?与新String(“s”)不同?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!