为什么 Java 8 中不再需要 StringBuilder 拼接字符串
2016-12-30 13:46
453 查看
为什么 Java 8 中不再需要 StringBuilder 拼接字符串
来源:codeceo 发布时间:2016-12-27 阅读次数:4270
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/15/003d8b5289036f64860d3ca78cd2318b.gif)
在Java开发者中,字符串的拼接占用资源高往往是热议的话题.
让我们深入讨论一下为什么会占用高资源。
在Java中,字符串对象是不可变的,意思是它一旦创建,你就无法再改变它。所以在我们拼接字符串的时候,创建了一个新的字符串,旧的被垃圾回收器所标记。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/10/8147d6b28a1f29c401ee7e62325c4504.png)
如果我们处理上百万的字符串,然后,我们就会生成百万的额外字符串被垃圾回收器处理。
虚拟机底层在拼接字符串时执行了众多操作。拼接字符串最直接的点操作(dot operator)就是String#concat(String)操作。
?
所以这些操作繁多,如果你计算一下,会发现是O(n^2)的复杂度。
为了解决这个问题,我们使用StringBuilder类。它就像可变的String类。拼接方法帮助我们避免不必要的复制。它拥有O(n)的复杂度,远远优于O(n^2)。
然而Java 8默认使用StringBuilder拼接字符串。
Java 8的文档说明:
为了提高字字符串拼接的性能,Java编译器可以使用StringBuffer类或类似技术,在使用求值表达式时,减少中间String对象的创建。
Java编译器处理这种情况:
?
?
相关文章推荐
- 为什么 Java 8 中不再需要 StringBuilder 拼接字符串
- 为什么Java 8中不再需要StringBuilder拼接字符串
- Java 8中不再需要StringBuilder拼接字符串
- 关于JAVA 8 是否需要StringBuilder来拼接字符串的思考
- java 字符串拼接为什么要用 StringBuilder 而不直接用 String 相加连接
- 深入分析Java使用+和StringBuilder进行字符串拼接的差异
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
- [JAVA]浅谈String, StringBuilder字符串拼接速度
- 深入分析Java使用+和StringBuilder进行字符串拼接的差异
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
- 【Java性能】你需要知道的:Java字符串连接使用"+"和StringBuilder性能比较
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
- 深入分析Java使用+和StringBuilder进行字符串拼接的差异
- 为什么js拼接字符串StringBuilder效率那么高
- (5)java 字符串 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
- 深入分析Java使用+和StringBuilder进行字符串拼接的差异
- Java 中字符串拼接 String 和 StringBuilder(StringBuffer)的使用
- java字符串拼接技巧(StringBuilder使用技巧)
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接