String,StringBuffer, StringBuilder的比较

String

  • 在Java文档中,String类型称为不可变字符串
 String greeting = "help";

字符串包含h,e,l,p代码单元序列,不能修改其中的任何一个字符,但是可以修改字符串变量greeting,让它引用另外一个字符串,也就是将指向(这里不用存放,而用指向)help的变量greeting改成指向other,此时help就是无用对象,改变指向是繁重的操作,并在 中产生大量垃圾,JVM 的 GC 将会回收。

  • String创建原理

当我们使用双引号创建一个字符串时,它首先在JVM字符串池中查找具有相同值的字符串,如果发现它返回引用,则它会创建String对象,然后将其放入 字符串池 中。通过这种方式,JVM通过在不同线程中使用相同的字符串来节省大量空间。

  • 其他
  1. +运算符重载为String并用于连接两个字符串,它在内部使用StringBuffer来执行此操作。
  2. 字符串表示UTF-16格式的字符串

String,StringBuffer, StringBuilder的比较

类型 描述 差异 线程 适用于
String 拼接速率较慢 字符串- 常量 字符串不会更改
StringBuffer 拼接速率中等 字符串- 变量 线程安全 字符串可以改变,多个线程访问
StringBuilder 拼接速率较快,JDK5.0 引入 字符串- 变量 非线程安全 字符串可以改变,单个线程访问

如果将常量字符串拼接,那么在编译之初就会将字符串组装好,此时String速率比StringBuffer和StringBuilder都要快。

String abc = “How” + “old” + “are” + “you”;

此种形式中,编译之前,会默认将这些 final 常量拼装成新的 final 常量,也就是说 .class文件中不会有how, old, are, you这几个字符串的出现,速度最快。

猜你喜欢

转载自blog.csdn.net/ai_shuyingzhixia/article/details/80203669