问题标签 [string-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
24096 浏览

java - 关于Java的字符串池的问题

考虑这段代码:

当使用new关键字时,Java 会abc String再次创建对吗?这将存储在常规堆还是String池中?有多少Strings 将在String池中结束?

0 投票
2 回答
5005 浏览

c - 字符串文字的 C 优化

我刚刚在 gdb 中检查了以下内容:

...我得到以下信息:

我真的很惊讶字符串指针对于等效单词是相同的。我原以为每个字符串都会在堆栈上分配自己的内存,而不管它是否与另一个数组中的字符串相同。

这是某种编译器优化的例子,还是这种字符串声明的标准行为?

0 投票
3 回答
6343 浏览

c++ - 实现一个保证不会移动的“字符串池”

我需要一个“字符串池”对象,我可以在其中重复插入一个“字符序列”(我使用这个短语来表示“字符串”,而不会将其与 std::string 或 C 字符串混淆),获取指向该序列的指针,并保证如果/当池需要增长时指针不会失效。使用简单std::string的 as 池将不起作用,因为当字符串超出其初始容量时可能会重新分配字符串,从而使所有先前指向它的指针无效。

池不会无限制地增长——有明确定义的点,我将在其clear()上调用方法——但我也不想在其上保留任何最大容量。它应该能够生长,无需移动。

我正在考虑的一种可能性是将每个新的字符序列插入 aforward_list<string>并获取begin()->c_str(). 另一个是插入到 中unordered_set<string>,但我很难找出当 unordered_set 必须增长时会发生什么。我正在考虑的第三种可能性(不太热情)是滚动我自己的 1K 缓冲区链,我将字符序列连接到其中。这具有(我猜)具有最高性能的优势,这是该项目的要求。

我很想听听其他人会如何建议解决这个问题。

更新 1:编辑以澄清我对短语“字符序列”的使用等同于“字符串”的一般概念,而不暗示 std::string 或以空字符结尾的字符数组。

0 投票
3 回答
167 浏览

java - java字符串的不变性

如果我跑,

那么有什么区别:

这就是我感到困惑的地方:

Head First Java 说:“如果字符串池中已经有一个具有相同值的字符串,那么 JVM 不会创建重复项,它只是将您的引用变量引用到现有条目。”在我看来是s1 已经创建了“abc”,s2 只是引用它。我对吗??

0 投票
1 回答
81 浏览

java - 创建字符串的几种方法之间的区别

下面显示了几种创建字符串的方法。问题以评论的方式添加到表达式之后。

另一个问题:创建 str3 和 str4 的方式有什么不同吗?

0 投票
5 回答
124 浏览

java - 如何在java中创建字符串对象(通过以下代码)

以下代码在java中创建了多少个String对象:如果String池中没有包含相同值的String对象。(我在某处读到,由于我们将参数作为“Hello”传递,这是一个字符串文字,它还将在字符串池上创建另一个对象作为“Hello”。)

0 投票
1 回答
865 浏览

java - Java 字符串连接和对象

以下代码将创建多少个对象?

我的理解:a、b 和 c 是字符串文字,将存储在字符串池中(因此不会创建新对象)。然后在使用“+”运算符附加时,它在内部使用 StringBuffer,因此将创建 1 个对象,该对象将保存“abc”(StringBuffer)。它将在一个新的 String 对象中返回(其值为“abc”)。

-> 因此,据我所知,在此操作期间将创建总共 2 个对象。(一个 String 和一个 StringBuffer)。

-> 字符串“abc”也不会出现在字符串池中。

我错了吗?

0 投票
1 回答
5148 浏览

java - 如何检查字符串池内容?

有什么方法可以检查,当前字符串池中有哪些字符串。

我可以以编程方式列出池中存在的所有字符串吗?

或者

任何IDE已经有这种插件?

0 投票
0 回答
186 浏览

java - Java 字符串池如何工作?

我正在学习java中的字符串实现,学习时遇到以下疑问

我知道,

上面的比较将返回 false (根据我研究的内容,== 比较字符串对象的内存位置)。

但这返回true;

  1. 我想知道它返回“真实”的原因?
  2. 以及如何为字符串池中的字符串文字分配内存(字符串池/后端内部实际发生的情况);

对于以下操作,

0 投票
0 回答
61 浏览

java - 有没有办法间接访问字符串池?

我知道 Java 中的字符串池是隐藏的(很可能是出于好的目的)。但是,如果您真的想监控并查看池中的元素怎么办?这可以使用间接方法(例如反射或JNI)来实现,还是完全不可能?

如果这是可能的,关于如何完成的任何想法?我的想法是检查String#intern()调用本机方法的位置,看看是否可以从中获取一些信息,但我无法确定调用它的位置。

在开始之前,我想知道这是否可能