分析&回答
String、StringBuilder与StringBuffer不同点
标题 | String | StringBuffer | StringBuilder |
---|---|---|---|
基本表现 | String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 | StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 | 可变类,速度更快 |
是否可变 | 不可变 | 可变 | 可变 |
是否线程安全 | 线程安全 | 线程安全 | 线程不安全 |
使用注意 | 无 | 多线程操作字符串 | 单线程操作字符串 |
反思&扩展
如何选择String、StringBuffer与StringBuilder?
- 运行效率: StringBuilder>StringBuffer>String
- 如果不涉及线程安全的情况下,尽量使用StringBuilder执行字符串相加的处理。
StringBuilder与StringBuffer共同点
- StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)
- StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。
喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!