关于JDK8中的字符串拼接示例详解

  

  

在Java开发者中,字符串的拼接占用资源高往往是热议的话题。

  

让我们深入讨论一下为什么会占用高资源。

  

在Java中,字符串对象是不可变的,意思是它一旦创建,你就无法再改变它。所以在我们拼接字符串的时候,创建了一个新的字符串,旧的被垃圾回收器所标记。

  

关于JDK8中的字符串拼接示例详解

  

如果我们处理上百万的字符串,然后,我们就会生成百万的额外字符串被垃圾回收器处理。

  

在大多数的教程中,也许你会看到用+号拼接字符串会生成多个字符串,导致性能过差,建议使用StringBuffer/StringBuilder来拼接。

  

  

本文在JDK8中做了如下实验:

        公共静态void main (String [] args) {   字符串的结果=" ";   结果+=备嗟氖荨?   System.out.println(结果);   }      

通过javap - c来反编译得到:

        代码:   0:aload_0//推动“这”>   公共静态void main (String [] args) {   字符串的结果=" ";   for (int i=0;我& lt;10;我+ +){   结果+=备嗟氖荨?   }   System.out.println(结果);   }      

同样反编译:

        代码:   0:aload_0//推动“这”>   字符串的结果=" ";   for (int i=0;我& lt;10;我+ +){   StringBuilder tmp=new StringBuilder ();   tmp.append(结果);   tmp。追加(“更多数据”);   结果=tmp.toString ();   }    System.out.println(结果);      

可以看到不断生成新的StringBuilder,并且通过tostring,原来的StringBuilder将不再引用,作为垃圾,也增加了GC成本。

  

所以,在实际的使用中,当你无法区分字符串是静态拼接还是动态拼接的时候,还是使用StringBuilder吧。

  

<强>参考:

  

http://www.pellegrino.link/2015/08/22/string -连接-与- java - 8. - html

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

关于JDK8中的字符串拼接示例详解