Java提供了String、StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法。

它们的相同点是都用来封装字符串;都实现了CharSequence接口。它们之间的区别如下:

一、可变与不可变
String类是一个不可变类,即创建String对象后,该对象中的字符串是不可改变的,直到这个对象被销毁。StringBuffer与StringBuilder都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,是可变类。

由于String是可变类,适合在需要被共享的场合中使用,当一个字符串经常被修改时,最好使用StringBuffer实现。如果用String保存一个经常被修改的字符串,该字符串每次修改时都会创建新的无用的对象,这些无用的对象会被垃圾回收器回收,会影响程序的性能,不建议这么做。

二、初始化方式
当创建String对象时,可以利用构造方法String str = new String(“Java”)的方式来对其进行初始化,也可以直接用赋值的方式String s = "Java"来初始化。而StringBuffer只能使用构造方法StringBuffer sb = new StringBuffer(“hello”)的方式初始化。

三、字符串修改方式
String字符串修改方法是首先创建一个StringBuffer,其次调用StringBuffer的append方法,最后调用StringBuffer的toString()方法把结果返回,示例代码如下:

String str = “hello”;
str += “java”;
以上代码等价于下面的代码:

StringBuffer sb = new StringBuffer(str);
sb.append(“java”);
str = sb.toString();
上述String字符串的修改过程要比StringBuffer多一些额外操作,会增加一些临时的对象,从而导致程序的执行效率降低。StringBuffer和StringBuilder在修改字符串方面比String的性能要高。

四、是否实现了equals和hashCode方法
String实现了equals()方法和hashCode()方法,new String(“java”).equals(new String(“java”))的结果为true;

而StringBuffer没有实现equals()方法和hashCode()方法,因此,new StringBuffer(“java”).equals(new StringBuffer(“java”))的结果为false,将StringBuffer对象存储进Java集合类中会出现问题。

五、是否线程安全
StringBuffer与StringBuilder都提供了一系列插入、追加、改变字符串里的字符序列的方法,它们的用法基本相同,只是StringBuilder是线程不安全的,StringBuffer是线程安全的,。如果只是在单线程中使用字符串缓冲区,则StringBuilder的效率会高些,但是当多线程访问时,最好使用StringBuffer。

综上,在执行效率方面,StringBuilder最高,StringBuffer次之,String最低,对于这种情况,一般而言,如果要操作的数量比较小,应优先使用String类;如果是在单线程下操作大量数据,应优先使用StringBuilder类;如果是在多线程下操作大量数据,应优先使用StringBuilder类。

深入理解String、StringBuffer和StringBuilder类的区别相关推荐

  1. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  2. 1.19 String、StringBuffer和StringBuilder类的区别

    在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串.String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至 ...

  3. String、StringBuffer、StringBuilder类

    String.StringBuffer.StringBuilder类:java提供了string.stringbuffer两个类来封装字符串,并提供了一系列方法来操作字符串对象. String类是不可 ...

  4. 20191001:String,StringBuffer,StringBuilder类异同辨析

    String,StringBuffer,StringBuilder类异同辨析 框架 String对象的建立方法及底层 StringBuffer与String的区别 StringBuilder与Stri ...

  5. Java String、StringBuffer、StringBuilder类解析

    String.StringBuffer.StringBuilder类解析 概述 String类:代表字符串. 特点 String实现了Serializable接口,表示String是可序列化的 实现了 ...

  6. 【Java】字符串的理解与运用以及StringBuffer 和 StringBuilder 类

    常见字符串求解: 1.长度 用于获取有关对象的信息的方法称为访问器方法. String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数. 2.字符串索引位置的字符 3.提取 ...

  7. Java中String StringBuffer和StringBuilder的区别是什么

    String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的? 可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存 ...

  8. java stringbuilder换行_初遇Java StringBuffer 和 StringBuilder 类利用 StringBuilder 给TextView实现换行处理...

    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类. 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够 ...

  9. String,StringBuffer与StringBuilder的区别

    String,StringBuffer与StringBuilder的区别 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全 ...

最新文章

  1. Git常见问题解决方案指北
  2. IOS开发之OC-Switf 混编 -(OC 引 Swift 文件)
  3. 从零使用qemu模拟器搭建arm执行环境
  4. 086_html5Input类型
  5. Oracle实用技巧
  6. 前端网页制作-javaScripe 初学笔记
  7. flex 表格勾选后 鼠标滚动会自动勾选_外设Show 篇四十五:办公鼠里的BBA做工如何,罗技MX Anywhere 3鼠标体验_鼠标...
  8. SonarLint黄线警告python:S125
  9. Python解释器【转载】
  10. Redis下载安装与配置(windows)
  11. MacOS 开发 - isFlipped(坐标系)
  12. 外挂原理之植物大战僵尸
  13. 数据库kettle,datax,DBMigration,RazorSQL几款迁移工具使用感受(以及如何迁移表的结构如主键,索引,约束等)
  14. 微信网页授权多应用多域名使用 oauth2授权
  15. 新春快乐!马年大吉!518
  16. android 拔插键盘自动切换输入法
  17. 1.FastAPI简介
  18. java接口方式调用海康大华摄像机预览。
  19. I'm Nobody! Who are you?
  20. 【数学建模】11 数学建模常用算法和计算机辅助软件

热门文章

  1. 国内首个基于Windows操作系统的GPU高性能计算集群研制成功
  2. 浅谈领域驱动设计(DDD:Domain-Driven Design)
  3. 微型计算机输出设备 写出六种,2017计算机一级考试强化训练
  4. 达人评测 RTX3060和RX 6600M选哪个好
  5. 南开大学计算机学院李越,李越 简历 - 名人简历
  6. 在QQ音乐巅峰榜年度榜单中,听懂国人2022年的音乐记忆!
  7. Classifier-Free Diffusion Guidance【论文精读加代码实战】
  8. IOS TableViewCell分割线设置和隐藏多余cell
  9. 【安全】Shellshock漏洞
  10. Linux 安装 JDK + Tomcat + Mysql