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

string - 字符串池对象创建混乱

我尝试了一些类似下面的东西:

输出是:

s1==s2 true

s2==s3 false

s1==s3 false

为什么s2s1不等于s3?为什么要为 生成新的参考s3

0 投票
3 回答
100 浏览

java - 混淆字符串引用比较 == 与实习生

我读过这篇文章,我们什么时候应该在字符串常量上使用字符串的实习生方法,但仍然不太清楚 String == 也与实习生()比较。我有几个例子。有人可以帮助我更好地理解这一点。

0 投票
1 回答
44 浏览

java - 在java中动态传递字符串值的相等运算符bevaiour

传递的字符串是:

如果我做 a s1==s2,它会返回false。为什么字符串池在这里不起作用。

0 投票
1 回答
61 浏览

java - 字符串池管理

Strings是不可变对象并存储在字符串池中。假设在应用程序中没有使用new运算符创建任何字符串。在这种情况下,是否有必要使用equals方法而不是对象相等性检查==String我觉得上述问题的答案可能是肯定的,它与字符串池大小有关。字符串池是如何管理的?内存是有限的,所以我觉得字符串池也有一定的大小。它是否像LRU缓存一样工作,当池已满时丢弃最少使用的字符串?

请提供您宝贵的意见。

我的问题不是关于字符串池的大小。我的问题是,如果没有使用 new 运算符创建任何字符串,那么使用 == 将始终是安全的。此语句是否正确,或者在这种情况下,两个具有相同字符串字符的字符串引用也可能返回 false。我知道设计方面我应该总是使用 equals 方法,但我只想知道语言规范。

0 投票
1 回答
515 浏览

c# - c# 字符串池参考

如果我有两个具有相同值的字符串,它们应该具有相同的引用,对吧?

这是我的情况:

打印:s1:aaa;s2:aaa;等于:真

但看看这段代码:

打印:s1:aaa;s2:aaa;等于:假

为什么在第二种情况下,ReferenceEquals 返回 false?

0 投票
2 回答
4952 浏览

java - Java字符串:私有静态与局部变量性能

private final static String在 java 中使用 a 与使用每次访问方法时都必须“初始化”的本地字符串变量有什么性能优势?

我确实认为,private static final对于在类的不同部分重用的常量来说,使用字符串是一种很好的做法,但是如果一个字符串仅用于一种方法,在一个位置,出于一个非常具体的原因,不考虑其他方法关于,我实际上更喜欢用更少的私有成员来保持类的内部接口干净,并且只使用一个局部变量。

鉴于 java 具有 String interning,并且实际上保留了一个池,其中包含使用引号 ( String s = "some string") 声明的每个字符串的单个副本,那么每次访问方法时都必须声明/初始化/分配变量实际上会影响性能吗vs 使用静态字符串?

SS为了更清楚一点,使用or之间会有什么区别LS吗?

0 投票
4 回答
935 浏览

java - == 使用枚举 name() 和 toString()

谁能解释为什么 toString() 和 name() 引用相同的字符串?当我使用 == 将它们与字符串文字进行比较时,它们都通过了!枚举名称如何与来自 JVM 的字符串池一起使用?

0 投票
1 回答
148 浏览

java - Java 中的字符串池是否表现得像 LRU 缓存?

字符串是不可变的,并在字符串池中进行管理。我想知道这个池是如何管理的。如果在应用程序中使用了大量的字符串字面量,(我理解应该在追加、替换操作等修改较多时使用字符串生成器)然后 Pool 通过不一次又一次地重新创建新的字符串对象来提高应用程序的性能但是使用池中存在的相同对象,这是可能的,因为字符串是不可变的,这样做不会产生不良影响。

我的问题是如何String Pool管理。如果某些“k”字符串的频率很高,并且可能很少有其他字符串对象一旦创建就不会再次使用。可能使用了其他较新的字符串文字。

在这种情况下,字符串池的行为是否像 LRU 缓存一样,保存对最新使用的文字的引用并从池中删除较旧的未使用字符串?

字符串池是否有大小,或者我们可以在我们的应用程序中控制它吗?

编辑 :

通常我们为我们实现的自定义对象池分配大小。我想知道为什么 Sting Pools 没有像 LRU 这样的功能。这可能是一个功能。在大字符串的情况下也不会有问题。但我觉得它的实现方式是这样的,但我只是想知道它为什么不存在,我的意思是它不存在是出于某种正当的原因,拥有这个功能会导致一些不良影响。如果有人可以对这些不良影响有所了解,那就太好了。

0 投票
2 回答
633 浏览

java - String 类中的空构造函数

因此,当我偶然发现一个令人困惑的构造函数时,我正在阅读 String 类。代码是这样的

我不明白什么是

"".value;

做。这是什么""?是新的String object吗?如果是,用什么构造函数?

0 投票
0 回答
18 浏览

java - 不使用构造函数如何形成字符串对象?

字符串 s = "abc";

此语句创建一个 String 对象。但是怎么做?对象创建不是与构造函数相关联吗?在不使用构造函数的情况下如何在这里创建对象?