首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java :字符串池中String对象的数量

Java :字符串池中String对象的数量
EN

Stack Overflow用户
提问于 2017-03-12 19:03:30
回答 1查看 164关注 0票数 0

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

案例1:

代码语言:javascript
复制
StringBuilder sb = new StringBuilder();
sb.append("First");
sb.append("Two");
sb.append("Three");
sb.append("Four");

案例2:

代码语言:javascript
复制
StringBuilder sb = new StringBuilder();
sb.append("First"+"Second"+"Three"+"Four");

执行上述两种情况后,string池中会有多少个string对象?(注:假设string池在每个case之前都有0个对象)。

我的assumptions=>

在第一种情况下:

字符串池在第一个案例结束时将有4个字符串对象。多么?说明:字符串"First“将被创建,它将被添加到字符串池中& sb将被修改。然后将创建另一个字符串对象"Two“,并将其保存在字符串池中& sb将被修改。以同样的方式,在第一种情况结束时,字符串池将有4个string对象。

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

如果我错了,请纠正我。

EN

回答 1

Stack Overflow用户

发布于 2017-03-12 19:22:37

你错了。在第一个示例中,池中有四个字符串文字,它们不是在运行时创建的,而是在编译时创建的,并在类初始化时添加到池中。第二个示例在池中有一个字符串文字,因为连接是一个常量表达式,编译器计算它并将其作为单个文字嵌入字节码中。

在运行时求值的更一般情况下,当它不是常量表达式时,仍然不会得到七个字符串。例如,在

String foo = getPrefix() + getName() +“foo”+ getSuffix();

您将四个字符串连接为一个字符串,总共为五个字符串,不一定是interned。不是七个,因为一行字符串连接是作为StringBuilder#append调用实现的,并且没有中间字符串实例,只有结尾的结果实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42746594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档