如何在 Java 中使用字符串定位内存



具有以下代码:

String s="JAVA";
for(i=0; i<=100; i++)
     s=s+"JVM";

创建了多少个字符串?我的猜测是创建了 103 个字符串:

1:字符串池中的字符串"JAVA">

1:字符串"JVM"也在字符串池中

101:每次在循环中创建新的字符串s,因为字符串是不可变的类

字符串连接是通过StringBuilder(或StringBuffer(类及其append方法实现的。字符串转换是通过方法toString实现的,该方法由Object定义,并由Java中的所有类继承。有关字符串连接和转换的其他信息,请参阅 Gosling、Joy 和 Steele,Java 语言规范。

在您的情况下,将创建 103 个字符串,循环中的每个字符串一个,两个字符串JavaJVM

当在字符串上使用"+"运算符时,JAVA 每次都将其替换为 StringBuilder。

因此,对于每个循环,您创建一个StringBuilder,该将两个字符串(s 和 JVM(与该方法连接append()然后通过 toString() 方法将其转换为字符串

编译时字符串表达式被放入字符串池中。s=s+"JVM" 不是编译时常量表达式。所以每次它在堆中创建一个新的字符串对象时。

有关更多详细信息,请参阅此字符串文本的行为令人困惑

最新更新