如何用Java中的字符串来区分内存?

时间:2017-02-14 10:06:17

标签: java string memory string-pool

拥有以下代码:

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

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

1:String&#34; JAVA&#34;在字符串池中

1:String&#34; JVM&#34;也在字符串池

101:每次在循环中创建新的String s,因为String是一个Immutable类

3 个答案:

答案 0 :(得分:3)

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

在您的情况下,创建了103个字符串,循环中各有一个字符串以及两个字符串JavaJVM

答案 1 :(得分:1)

使用&#39; +&#39;运算符在字符串上,JAVA每次都用StringBuilder替换它。

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

答案 2 :(得分:1)

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

有关详细信息,请参阅此Behavior of String literals is confusing