当前位置: 首页 > 面试题库 >

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

斜高翰
2023-03-14
问题内容

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

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

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


问题答案:

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

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

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

有趣的是,字符串实习是flyweighthtml" target="_blank">设计模式的一个示例:

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



 类似资料:
  • 问题内容: 我是学习Java的C ++人。我在读《有效的Java》,使我有些困惑。它说永远不要写这样的代码: 因为它创建了不必要的String对象。但是应该这样写: 到目前为止还可以…但是,考虑到此类: 为什么第一个陈述可以?不是吗 我如何使行为像这样,使上面的语句可以正常运行(带有和不带有)?字符串到底有什么用,它能够像这样传递文字就可以了吗?据我了解,Java中没有“复制构造函数”的概念吗?

  • 本文向大家介绍不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?相关面试题,主要包含被问及不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?时的应答技巧和注意事项,需要的朋友参考一下 String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",然后我们将s指向"123",那么s所指向的那个对象是否发生了

  • 据我了解 将创建两个对象- 一个在String常量池中(如果不在常量池中) 堆内存中的一个 虽然对于实际创建多少对象以及在何处创建对象,人们的理解并不多。 不管怎样,我有以下问题- 为什么在String类的java文档中没有提到要创建多少对象以及在哪里创建 编辑 java docs for方法显然谈到了常量池,但在中没有这样说。

  • 简短版本:如果s是一个字符串,那么s=s“c”可能会在适当的位置修改字符串,而t=s“c”不能。但是操作如何知道它在哪种情况下? 长版本: 需要创建一个单独的字符串,因为程序随后希望旧字符串为s,新字符串为t。 如果是唯一的参考,则可以修改字符串,因为程序只希望是扩展字符串。如果末尾有多余的字符空间,CPython实际上会进行这种优化。 考虑这些函数,它们重复添加一个字符: 使用对结果进行基准测试

  • 问题内容: 在我上大学的这个Java项目中,我遇到一种情况,当前正在使用 其中msgs是一个链接的阻止队列,通过 但是,我想使用一个ObjectInputStream和一个ObjectOutputStream。我已经在构造函数中初始化了它们,并在构造它后刷新了ObjectOutputStream,我读到某个地方必须这样做。 我想同时发送Strings和另一个Object类型,通过网络将其称为gam

  • 我在一些软件包上看到了这个命令,我想知道参数是什么意思,例如 我的意思是,我知道,就像是的缩写一样,它也是一些东西的缩写,但是我尝试查看、、、,但没有任何实际帮助。这就像给文盲一本字典;很多单词,但没有关于选项参数或它们的缩写。