Java中String,StringBuffer,StringBuilder区别




一、String

  • 不可变字符串

我们查看源码,可以看到String类是被final关键字给修饰的。

public final class String

被关键字final修饰也就是说是最终的,不可变的,所以称String为不可变字符串。

String优点就是简单,可以直接给一个字符串字面量就可以赋给一个String类型的变量。非常之简单。

相比StringBuffer和StringBuilder这两个可变字符串,每次String在使用拼接符号+时,总是重新创建一个String字符字符串。所以如果使用大量的字符串拼接时,不是很推荐用String。

打个比方:如果你需要拼接10000个字符串岂不是要创建10000个String对象。虽说Java有垃圾回收机制GC,但是也占内存呀。所以你拼接大量字符串的时候还是使用StringBuffer或StringBuilder吧。

二、StringBuffer

  • 线程安全
  • StringBuffer和StringBuilder有公共父类AbstractStringBuilder(抽象类)。

StringBufer是在多线程环境下线程安全的,你问我啥是线程安全?看下面这张图片,StringBufer中很多的方法都是由关键字synchronized修饰的。也就是说是同步的。

简单理解同步的意思,打个比方:两个人都在操作一个东西,但是这个东西必须要一个人用完后,另一个人才能使用。非同步的意思简单理解当然就是可以一起用啦。

StringBuffer在字符串拼接的时候直接调用append()方法即可。同时这个类还提供了大量的方法,很多都很常用。推荐去学习。
在这里插入图片描述

三、StringBuilder

  • 线程不安全

StringBuilder在多线程环境中是不安全的。因为他的方法没有synchronized关键字修饰,非同步。

单线程环境下他是安全的。你就在一个main方法中跑的时候,随便用好了。

他的方法因为没有被synchronized关键字修饰。所以效率要比StringBuffer高。我在写算法题时如果需要拼接大量的字符串就经常用StringBuilder,简单粗暴还节省内存。

四、总结

三者运行速度 StringBuilder > StringBuffer > String

发布了86 篇原创文章 · 获赞 104 · 访问量 6627

猜你喜欢

转载自blog.csdn.net/weixin_44034328/article/details/103810436