🦊 Java
1、Java基础
1.1 StringBuffer和StringBuilder的区别
1.2 ConcurrentHashMap和TreeMap实现原理
1.3 ArrayList和LinkedList实现原理
1.4 HashSet和TreeSet实现原理
1.5 深拷贝与浅拷贝
1.6 抽象类与接口
2、Java多线程
2.1 并发编程的三大特性
2.2 指令重排
2.3 Volatile原理
2.4 CAS原理
2.5 Java的4种引用级别
2.6 Java中的锁
2.7 Synchronized实现原理
2.8 线程池实现原理
2.9 AQS
2.10 创建线程的方式
2.11 ThreadLocal原理
3、JVM
3.1 判断对象是否存活的方法
3.2 JVM内存结构
3.3 常见的垃圾收集算法有哪些
3.4 指针碰撞和空闲列表
3.5 常见的垃圾收集器有哪些
3.6 内存溢出与内存泄漏的区别
3.7 常用的JVM启动参数有哪些
3.8 反射机制
4、NIO
4.1 概述
5、Spring
5.1 Spring IOC
5.2 Spring AOP
6、SpringBoot
6.1 SpringBoot、SpringCloud的联系与区别
-
+
游客
注册
登录
StringBuffer和StringBuilder的区别
## 1 各自的特点 ### 1.1 String 1. 在 `Java` 中字符串属于对象,`Java` 提供了 `String` 类来**创建和操作字符串**。 2. `String` 的值是**不可变**的,这就导致每次对 `String` 的操作都会**生成新的 `String` 对象**,这样不仅效率低下,而且大量浪费有限的内存空间,下图是对 `String` 操作时内存变化的图: ![](/media/202105//1621914583.6706944.png) 3. 我们可以看到,初始 `String` 值是 `hello`,然后在这个字符串后面加上新的字符串 `world`,这个过程是需要在**堆内存**中开辟内存空间的,最终得到了 `hello world` 字符串也需要开辟相应的内存空间。 4. 这样短短的两个字符串,却要开辟三次内存空间,这是对内存空间的极大浪费。 ### 1.2 StringBuffer 和 StringBuilder ![StringBuffer Vs StringBuilder](/media/202105//1621914583.7803657.png) 1. `StringBuffer` 始于 `Java 1.0`,`StringBuilder` 始于 `Java 1.5`。 2. `StringBuffer` 的所有方法都是**同步**(Synchronized)的,因此它是**线程安全**的,这就导致相比于 `StringBuilder`,它在**性能上会差一点**;`StringBuilder` 的方法**不是同步的**(Non-Synchronized),因此它是**线程不安全**的,因此相比于 `StringBuffer`,他在**性能上会好一点**。 3. 由于 `StringBuilder` 相较于 `StringBuffer` 有速度优势,所以大多数情况下**建议使用 `StringBuilder` 类**,然而在应用程序要求**线程安全**的情况下,则**必须使用 `StringBuffer` 类**。 ## 2 三者的区别 1. **字符串修改**上的区别: 2. **String:** 不可变字符串。 3. **StringBuffer:** 可变字符串,效率低,线程安全。 4. **StringBuilder:** 可变字符串,效率高,线程不安全。 5. **初始化**上的区别: 6. **String:** 可以赋空值。 7. **StringBuffer 和 StringBuilder:** 不能赋空值。 ```java ①String String s = null; String s = “abc”; ②StringBuffer StringBuffer s = null; //结果警告:Null pointer access: The variable result can only be null at this location StringBuffer s = new StringBuffer();//StringBuffer 对象是一个空的对象 StringBuffer s = new StringBuffer(“abc”);//创建带有内容的 StringBuffer 对象,对象的内容就是字符串” ``` ## 3 建议 1. 如果要操作**少量的数据**用 `String`。 2. **多线程**字符串缓冲区下操作**大量数据**用 `StringBuffer`。 3. **单线程**字符串缓冲区下操作**大量数据**用 `StringBuilder`。 ## 4 参考文献 1. [String vs StringBuffer vs StringBuilder](https://www.journaldev.com/538/string-vs-stringbuffer-vs-stringbuilder)。 2. [图析:String,StringBuffer 与 StringBuilder 的区别](https://blog.csdn.net/weixin_41101173/article/details/79677982)。
ricear
2022年10月8日 10:43
©
BY-NC-ND(4.0)
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码