字符串连接所需的解决方法

时间:2017-03-08 07:06:40

标签: java string core

目前,当javac遇到String连接时,它会将代码转换为使用StringBuilder。例如:

String a = String.valueOf(System.currentTimeMillis());
    String b = String.valueOf(System.currentTimeMillis());
    String c = String.valueOf(System.currentTimeMillis());
    String d = a + b + c + "_IND";

变得类似

String d = new StringBuilder().append(a).append(b).append(c).append("_IND");

由于未明确调整StringBuilder的大小,因此使用默认大小,并且当默认大小太小时,通常会在运行时调用expandCapacity。

在分析应用程序时,我们看到了很多这样的操作,例如构建各种HashMaps的密钥,为JSF中的每个元素构建唯一的密钥等,这会导致额外的内存使用。

有没有更好的方法来减少这种情况。

1 个答案:

答案 0 :(得分:2)

  

如果您尝试在其中插入更大的字符串   StringBuilder总是可以理解大的大小   字符串并初始化您的StringBuider与更多   估计大小作为其默认容量。

推导出一个经验公式,为StringBuilder提供初始化能力,以便控制不足和过高估计尺寸的成本。

因为StringBuilder以char数组的形式存储正在构建的字符串。 StringBuilder的容量是此数组的长度。一旦数组溢出,就会分配一个新的(更长的)数组,并将内容传输给它。这使得容量上升。