问题标签 [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 投票
2 回答
91 浏览

java - Java SE 字符串池

我不明白为什么下面的代码返回“false”

我读过“字符串是不可变的,文字是池化的”。执行trim()后, z 将是z="Hello World",然后为什么输出不是true

0 投票
1 回答
372 浏览

java - java中如何防止mybatis varchar进入字符串池?

我们的数据库中有几个敏感字段需要防止进入 Java 字符串池。在数据库中都是 VARCHAR,我们在代码中使用 StringBuilders 来防止它们被放入常量池中。

我们使用 MyBatis 与数据库交互,我目前正在尝试实现一个类型处理程序,我正在尝试使用 setObject 将 StringBuilder 映射到 Varchar 到。

我想知道这是否可能,如果可能,MyBatis 和 JDBC 之间是否还有其他区域,这意味着不能保证 VARCHAR 不会在字符串池中结束?(在代码中强制转换,语句以字符串形式出现,诸如此类)

我也在 mybatis-users google group 上问过这个问题,但到目前为止没有人能够在那里提供帮助

编辑 - 我应该澄清一下,这并不是严格意义上的字符串池,而是控制数据在堆上的位置,并通过用空值覆盖尽快从可变 CharSequence 中擦除数据。字符串绝对不能进入池,但简单地将不在池中的字符串清空仍然会由于垃圾收集的工作方式而导致安全问题。

0 投票
1 回答
145 浏览

java - JVM 字符串池线程是本地的吗?它会导致这个用例出现任何问题吗?

互联网上的许多文章都指定String.intern()在多线程中使用不好,但我真的不明白为什么它不好。使用String.intern()总是从字符串池返回一个唯一的字符串,不是吗?如果不是这种情况,那么JVM 字符串池线程是本地的吗?如果不是,那么为什么String.intern()在多线程环境中使用同步被认为是不好的?所以在以下用例中,它不会解决同步问题:

在这里,我基于一个公共字符串 id 同步这两种方法。我想将整个方法作为一个事务执行(防止其他方法甚至读取数据库)。但是在数据库级别执行此操作会导致死锁(不会阻止读取访问)。在这种情况下使用字符串实习生进行同步是否存在瓶颈或死锁问题?有没有其他方法可以解决这个问题?如有任何不便或格式错误,请原谅我。

0 投票
1 回答
934 浏览

java - 如何将堆区数据移动到字符串常量池?

如何将堆区数据移动到字符串常量池?

我不想创建新对象,所以只需从堆中剪切对象并将其粘贴到字符串常量池中

0 投票
3 回答
115 浏览

java - 在intern()方法之后比较两个相等的字符串

Javadoc 说如果在字符串池中有一个相等的字符串,intern() 方法将返回该字符串。

我希望在这两种情况下都能实现。

0 投票
3 回答
366 浏览

java - 字符串池和 String[]

我有几个关于这个话题的问题可以帮助我理解

  1. 与字符串文字不同,字符串数组中的字符串不会自动进入 Sting 池这一事实背后的登录是什么?

  2. 我是否正确理解只有字符串文字会隐式进入字符串池?

  3. 我是否正确理解来自public static void main ( public static void main(String[] args) ) 的字符串数组也不会进入字符串池?

0 投票
3 回答
116 浏览

java - Java中的字符串是如何分配内存的?

具有以下代码:

创建了多少个字符串?我的猜测是创建了 103 个字符串:

1:字符串池中的字符串“JAVA”

1:字符串“JVM”也在字符串池中

101:s每次循环都会创建新的String,因为String是一个Immutable类

0 投票
1 回答
610 浏览

python - Python解释器字符串池优化

在看到这个问题及其重复后,我仍然有一个问题。

我得到什么is==做什么以及为什么如果我跑步

我明白了True。这里的问题是为什么会发生这种情况:

所以我做了我的研究,我发现了这个。答案说 Python 解释器使用字符串池。因此,如果它看到两个字符串相同,它会将相同的字符串分配给id新的字符串以进行优化。

直到这里一切都很好并且得到了回答。我真正的问题是为什么这种池只发生在某些字符串上。这是一个例子:

因此,对于某些字符,字符串池似乎不起作用。我在这个示例中使用了 Python 2.7.6,所以我认为这将在 Python 3 中得到修复。但是在 Python 3 中尝试了相同的示例后,出现了相同的结果。

问题:为什么没有针对此示例优化字符串池?对 Python 进行优化不是更好吗?


编辑:如果我运行"a b" is "a b"返回True。问题是为什么使用变量它会False为某些字符返回而其他字符True

0 投票
1 回答
517 浏览

java - 如果字符串池是 Perm Gen Space 的一部分,它会被垃圾收集吗?如果是这样,它是在次要 GC 还是完整 GC 期间收集的?

我读过字符串池实际上是烫发的一部分。并且字符串池通常不会被垃圾收集,因为即使在 GC 运行并且不再使用引用之后引用仍然存在。那么它真的会收集垃圾吗?就 perm gen 而言,它需要一个完整的 GC 来进行垃圾收集。所以收集发生与否?请帮助解决混乱

0 投票
1 回答
164 浏览

java - Java:字符串池中的字符串对象数

我的问题是关于 java 中的字符串池。

情况1:

案例二:

以上2个案例执行后,字符串池中会有多少个字符串对象?(注意:假设字符串池在每个案例之前都有0个对象。)

我的假设=>

在第一种情况下:

字符串池在第一种情况结束时将有 4 个字符串对象。如何?说明:将创建字符串“First”,并将其添加到字符串池中并修改 sb。然后将创建另一个字符串对象“Two”,将其保存在字符串池中,并且 sb 将被修改。同样,在第一种情况结束时,字符串池将有 4 个字符串对象。

在第二种情况下:字符串池将有 7 个字符串对象。如何?说明:字符串“First”和“Two”将在池中创建,然后由于我们连接“First”和“Two”,第三个字符串对象“FirstSecond”将在字符串池中创建。同理,在第 2 种情况结束时,字符串池将有 7 个对象。

如果我错了,请纠正我。