[2025.1.4 JavaSE学习]String && StringBuffer && StringBuilder

String类相关知识

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

image

  • string.intern()返回常量池对象地址
  • String每一次更新(+)都需要重新开辟空间

StringBuffer

  • 直接父类是AbstractStringBuilder
  • 可串行化
  • 父类有属性char[ ]value,不是final类型,不在常量池而是存放在堆中
  • StringBuffer是final修饰的类,无法被继承
  • StringBuffer更新可以更新内容,不用每次都更新地址(除非空间不够时)

image


StringBuilder

  • 是一个可变的字符序列,提供一个与StringBuffer兼容的API,但是不保证同步(即不是线程安全),可用作StringBuffer的一个简易替换,用于字符串缓冲区被单个线程使用的时候,如果可以,优先使用该类,因为大多数实现比StringBuffer要快

三者对比

  • String:不可变字符序列,效率低,但是复用率高(可以多个引用指向同一个字符串,在常量池中不是创建多个相同的字符串常量)
  • StringBuffer:可变字符序列,效率较高,线程安全(有synchronized关键字修饰)
  • StringBuilder:可变字符序列,效率最高,线程不安全

本日学习总结

一定要多看多看多看源码!!!能解决你疑惑的百分之九十的问题。

posted @ 2025-01-04 01:47  Luna-Evelyn  阅读(26)  评论(0)    收藏  举报