具有以下代码:
String s="JAVA";
for(i=0; i<=100; i++)
s=s+"JVM";
创建了多少个字符串?我的猜测是创建了 103 个字符串:
1:字符串池中的字符串“JAVA”
1:字符串“JVM”也在字符串池中
101:s
每次循环都会创建新的String,因为String是一个Immutable类
具有以下代码:
String s="JAVA";
for(i=0; i<=100; i++)
s=s+"JVM";
创建了多少个字符串?我的猜测是创建了 103 个字符串:
1:字符串池中的字符串“JAVA”
1:字符串“JVM”也在字符串池中
101:s
每次循环都会创建新的String,因为String是一个Immutable类
字符串连接是通过StringBuilder
(or StringBuffer
) 类及其append
方法实现的。字符串转换是通过方法实现的,由Java中的所有类toString
定义和继承。Object
有关字符串连接和转换的更多信息,请参阅Gosling、Joy 和 Steele,Java 语言规范。
在您的情况下,创建了 103 个字符串,循环中的每个字符串和两个字符串Java
和JVM
.
编译时字符串表达式被放入字符串池中。s=s+"JVM" 不是编译时常量表达式。所以每次它在堆中创建一个新的字符串对象。
有关更多详细信息,请参阅字符串文字的此行为令人困惑
在字符串上使用“+”运算符时,JAVA 每次都将其替换为 StringBuilder。
因此,对于每个循环,您创建一个StringBuilder
将两个字符串(s 和 JVM)与该方法连接起来,然后通过该方法append()
将其转换为 StringtoString()