问题标签 [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.
java - 可以在运行时将字符串添加到字符串池吗?
如果我从方法调用或从 获取字符串对象StringBuilder.toString()
,该字符串是否会添加到字符串池中?
String 是否仅在类加载期间添加到池中?
java - 在内存中创建了多少个字符串?
说我有这个String
表情
我知道字符串池“允许运行时通过在池中保留不可变字符串来节省内存”字符串池
字符串池中将创建多少个字符串?
我最初的猜测是 5 - "Tom"
, "Brady"
, "Goat"
, "TomBrady"
, "TomBradyGoat"
, 因为String
连接操作的顺序(从左到右?)或者它只是存储在字符串池中的最终结果“TomBradyGoat”?
java - 使用 println 池中的字符串计数
我正在准备 OCA SE 7 考试,其中一些问题确实(!)棘手。
在我使用的其中一本书中,我发现了一个错误,所以我想确认以下内容...
方法执行后,池中有println
多少对象?String
我的理解是: - 第一行没有将字符串添加到池中 - 第二行创建“秋天”和“夏天”并将它们添加到池中所以书中的正确答案是 2。
但是,我也认为...因为我应该对考试问题偏执...字符串“false”也被创建并添加到池中...所以我认为 3 应该是正确答案...还是会发生其他一些黑魔法,例如...“true”和“false”已经被JVM默认放入池中或其他什么?...
有人可以确认吗?
编辑:经过一些研究,我发现在书中谈论“错误”是不公平的;作为一般提示:考试问题通常根据“以下代码”制定;所以他们显然对代码本身在本地做什么的简单旧的简单计算很感兴趣。因此,范围因此不允许检查println(boolean b)
实现或编译器优化。很公平 :)
java - 字符串池内存分配
这打印:
假
真
谁能解释一下为什么会这样?
java - 将 String 创建为 new() (在堆内不在字符串池中)和字面量(在字符串池内)有什么区别?
当我们使用 new() 运算符创建字符串时,它是在堆中创建的,而不是添加到字符串池中,而使用文字创建的字符串是在存在于堆的 PermGen 区域中的字符串池本身中创建的。这样对吗 ????????我的解释对吗……
java - 比较命令行参数参考返回 false 而字符串数组返回 true
目前我正在使用字符串操作,在进行演示时我发现了一些不同的行为。
下面是我的代码。
}
上面的代码是。我正在运行传递命令行参数的代码。
str1==str2:: 真
str1==str3:: 假
strArray[0]==strArray[1]:: 真
str1==strArray[1]:: 真
strArray1[0]==strArray1[1]:: 真
str1==strArray1[1]:: 真
args[0]==args[1]:: 假
在这里,我有两个疑问。
如果我比较字符串 str1==str3 的引用,那么它将返回 false,因为 str3 是使用新字符串创建的,因此不会驻留在字符串池中,那么str1==strArray1[1] 如何返回 true?
strArray[0]==strArray[1] 会返回 true,strArray1[0]==strArray1[1] 也会返回 true 那么为什么命令行参数args[0]==args[1] 返回 false呢?
请指导。
java - 为什么 Wrapper Classes 没有类似于 Stringpool 的池?
Integer、Character、Double 等——所有这些都是不可变的类,如 String。String 有 Stringpool 来节省内存,但为什么这些包装器没有类似的池?
我已经检查过:整数有一个类似的池,最多只有 127 个,但不会超过这个。
java - 关于字符串连接行为
我知道,鉴于字符串的不变性,类似于
效率非常低,因为最初实例化一个字符串并将其放入字符串池中,然后a+=i
创建一个新字符串(第一个循环中的0),由 引用a
并且前一个字符串现在可以进行垃圾回收。这发生了九次。
更好的方法是使用StringBuilder
:
new
但是当我用关键字实例化字符串时,幕后会发生什么
?
我知道在这种情况下a
不会被实习(它不在字符串池中),但它仍然是不可变的吗?a+=i
这段时间指令做什么?行为与我的第一个示例相同吗?
java - 这是对java中字符串不变性的妥协吗?
我们都知道 String 在 java 中是不可变的——一旦创建了字符串,内容就不能改变。
String 使用字符数组char[] value
来存储字符串内容,这里是java代码 -
如果我们可以访问该字段values[]
并对其进行更改怎么办?看到这个代码 -
这样,我认为,我们可以更改违反字符串不变性原则的字符串内容。
我错过了什么吗?
java - 如果字符串池内存不足会怎样?
如果字符串池上有很多字符串字面量并且内存不足会发生什么情况。它是否会扩大规模,如果是,如何?如果没有,如果我尝试创建更多的字符串文字会发生什么?