[2025.1.4 JavaSE学习]String && StringBuffer && StringBuilder
String类相关知识
- 字符串的字符使用Unicode字符编码,一个字符占两个字节,不区分汉字或者英文字母
- String有很多构造器,例如可以用String对象、char[ ]数组、byte[ ]数组等进行构造初始化
- String类实现了接口 Serializable(使得String可以串行化:即可以在网络中进行传输)、接口Comparable(可以比较大小)
- String中有 private final char value[ ],用于存放字符串内容,由于final修饰,其指向的地址不能变化
- 两种不同定义方法在JVM中的可视化:

- string.intern()返回常量池对象地址
- String每一次更新(+)都需要重新开辟空间
StringBuffer
- 直接父类是AbstractStringBuilder
- 可串行化
- 父类有属性char[ ]value,不是final类型,不在常量池而是存放在堆中
- StringBuffer是final修饰的类,无法被继承
- StringBuffer更新可以更新内容,不用每次都更新地址(除非空间不够时)

StringBuilder
- 是一个可变的字符序列,提供一个与StringBuffer兼容的API,但是不保证同步(即不是线程安全),可用作StringBuffer的一个简易替换,用于字符串缓冲区被单个线程使用的时候,如果可以,优先使用该类,因为大多数实现比StringBuffer要快
三者对比
- String:不可变字符序列,效率低,但是复用率高(可以多个引用指向同一个字符串,在常量池中不是创建多个相同的字符串常量)
- StringBuffer:可变字符序列,效率较高,线程安全(有synchronized关键字修饰)
- StringBuilder:可变字符序列,效率最高,线程不安全
本日学习总结
一定要多看多看多看源码!!!能解决你疑惑的百分之九十的问题。

浙公网安备 33010602011771号