xiaomi

个人博客

小米的个人博客,欢迎交流


Java中操作字符串都有哪些类?它们之间有什么区别?

刷 Java 面试题的时候,遇到了这样一个问题

“ Java 中操作字符串都有哪些类?它们之间有什么区别?”

突然一下子说不出个所以然来,菜是原罪,还是老老实实刷基础做总结吧。

概述

操作字符串的类有 StringStringBufferStringBulider

  • String 声明的对象是字符串常量

  • StringBuffer 声明的对象是可变长字符序列,是变量

  • StringBuilder 声明的对象也是可变长字符序列,是变量

String

为什么说 String 声明的是字符常量呢?

  • String 类是被 final 修饰的类,不可以被继承,也不会被其他类改变

  • String 每次操作字符串都会生成新的字符串对象
  • 每次生成新的对象会影响系统内存,过多的无引用对象会引发 JVM 进行垃圾回收工作,这样效率就更低了
  • 所以对于字符串内容改动频率高的情况,尽可能不要使用 String

StringBuffer

  • StringBuffer 是线程安全的
  • 任何字符串的操作都是在原有字符串对象上执行,不生成新的对象
  • StringBuffer 是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类
  • 常使用 append\insert 操作

StringBuilder

  • StringBuilder 是非线程安全的
  • 任何字符串的操作都是在原有字符串对象上执行,不生成新的对象
  • StringBuilder 是在 5.0 新增的,被设计用作 StringBuffer 的一个简易替换,两者方法基本相同

最后

  • 从速度上而言
    • StringBuilder > StringBuffer > String
    • StringBuilder 适用于单线程情况下操作大量字符串
    • StringBuffer 适用于多线程情况下操作大量字符串
    • String 适用于操作少量字符串

用来笔记,分享。

以上若有不对之处欢迎留言指正,共同进步…

Logging

  • 2019/11/12 init