问题标签 [string-interning]
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.
java - 为什么在虎书的符号表中字符串实习生?
在第 5.1.4 章,Java 中的现代编译器实现:
我不明白为什么在这里使用字符串实习生,因为Hashtable
用于key.equals(...)
检查身份。
你能告诉我原因吗?谢谢!
java - intern() 是否曾经在池中创建文字?
据说intern()
如果它不存在,它将在池中创建一个字符串文字。
我的问题是这种情况何时会出现字符串对象存在但不存在文字的情况?而 intern() 将不得不实际创建一个新的文字,然后返回对文字的引用。
java - 为什么注释字符串值没有被实习?
以下代码段打印了 4 个不同的哈希码,尽管重用了字符串常量和文字。为什么字符串值不在注释元素上?
c# - 转换为“对象”类型的目的是什么?
我在一个网站上找到了如下代码。
在这里,既然 a,b,d 本身就是字符串的对象,那么再次转换为对象类型的目的是什么?
java - Java - 构造函数中的自动字符串实习
假设我有一堂课如下:
是什么使以下代码为真?
Java 是否会自动在我的对象实例中设置实习生字符串?
Java唯一不实习字符串的时间是使用创建它们的时候new String("...")
吗?
编辑:
感谢您的回答,这个问题的扩展就是说
使用相同的测试返回false 。
这是因为我将 String 的实例传递给构造函数,而不是 String 文字。
java - 是否在 for-each 循环中使用 Java 实习生字符串
我已经阅读了关于 SO 的问题,解释 Java 自动实习字符串文字,并且显然在intern()
被调用时实习。但是,我想知道是否在一个循环(foreach
在我的情况下是一个循环)中,字符串也会自动被实习。我问是因为我正在实习字符串以节省几个非常大的内存,LinkedHashMaps
并且想知道调用intern()
是否是多余的。
例子:
下一个示例是否会在内存使用方面与第一个示例(假设相同的array
值)有任何差异,或者s
此时已经被实习了?
我意识到在这种情况下,可能没有等效的字符串,但在我的情况下,我有几个地图的自定义键,最终确实使用了重复的字符串值,我想知道调用intern()
以节省内存是否是多余的在此刻。
为了补充这个问题,如果一个数组是从文字创建的(在这种情况下,它们最初是实习的),然后作为参数传递给一个方法,上面的循环是否会使用实习字符串?IE:
在这种情况下,要么s
是因为array
一开始就被实习而被实习,要么因为s
在循环参数中被声明为新对象而未被实习。哪个是对的?
编辑:为了进一步解释我实习的原因,我想释放堆中的内存以避免达到最大堆大小或 GC 开销限制。在这种情况下,性能和速度对我来说并不是非常重要。
java - 为什么java编译器不实习数组?
考虑下面的代码
它打印等于!,(我知道编译器的字符串实习)
但是上面的代码不起作用,为什么java编译器不实习字符串数组?
java - 为什么使用追加的 StringBuilder 的 str == str.intern() 的结果不同?
All.I 有一个这样的 java 代码片段:
这个java代码将输出true,false。我想知道为什么。谢谢大家。
python - 如何确定 Python 2.7.5 中的实习字符串数量?
在 Python 的早期版本(我不记得是哪个版本)中,调用gc.get_referrers
任意内部字符串可用于获取对interned
dict 的引用,然后可以查询其长度。
但这在 Python 2.7.5 中不再有效:gc.get_referrers(...)
不再interned
在它返回的列表中包含 dict。
在 Python 2.7.5 中还有其他方法可以确定实习字符串的数量吗?如果是这样,怎么做?
python - 调用 intern() 的 Python 2 和 3 兼容方式
如何编写使用 Python 的代码,该代码intern
将与 Python 2 和 Python 3 兼容(兼容)?有干净的方法吗?
在 Python 2 中,intern 是内置的,所以你使用intern()
. 在 Python 3 中,它已移至sys
模块,因此您应该使用sys.intern()
. 似乎intern()
适用于 Python 2 但不适用于 Python 3,sys.intern()
适用于 Python 3 但不适用于 Python 2。是否有任何干净的语法适用于 Python 2 和 Python 3,而不使用版本检测(丑陋)?