gpt4 book ai didi

java - concat 命令中的这些字符串是在字符串池中创建的吗?

转载 作者:行者123 更新时间:2023-12-05 01:04:11 25 4
gpt4 key购买 nike

假设我用 Java 写了这样的东西:

String a = args[0]; // user input from keyboard
String b = a + "foo1";
String c = "foo2" + "foo3";

会在字符串池中创建“foo1”、“foo2”、“foo3”吗?

最佳答案

字符串 "foo1""foo2foo3"编译时常量表达式的值,它们都将被实习。

其他字符串都不会。

  • a 未实习。

  • a + "foo1" 未实习。

  • "foo2""foo3" 都没有被实习。事实上 runtime String 对象甚至没有为这两个文字创建。 "foo2"+ "foo3" 表达式在编译时计算。


字符串不可变这一事实并不能预测字符串值是否被保留。 (所有字符串都是不可变的,但只有一些是 intern 的。)

最后,所有这些都与实际编程无关。如果您始终使用 equals(...) 来测试字符串,则实习(或不实习)对程序行为没有影响。

在现代 JVM 中,GC 的字符串重复数据删除功能是管理可能重复字符串所消耗的空间的更好方法,而不是实习。无论如何,文字/常量表达式占用的内存量应该是微不足道的。

关于java - concat 命令中的这些字符串是在字符串池中创建的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72655984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com