全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java 中 String,StringBuffer 和 StringBuilder 的区别及用法

1 简介

在 Java 语言中,共有 8 个基本的数据类型,分别为:byte、short、int、long、float、double、boolean 和 char,其中 char 类型用于表示单个字符,例如 a、b、c 、A、B、C、& 这些大小写字母或者特殊字符等等。在实际的编程中,单个的字符并没有我们想象中用的那么频繁,反而是多个字符组成的“字符串”更为常见,但是在基本的数据类型中,并没有字符串这种数据类型。为了解决这个问题,Java 语言为我们提供了一个被 final 关键字修饰的类 String,她就表示字符串类型,同时由于其被 final 修饰,这也表明咱们只能用这个类创建字符串以及调用其中的方法,却不能继承她。

虽然 Java 语言为我们提供了字符串类 String,能让我们方便的使用字符串类型,姑且这么说,但是在不断的发展中,我们发现单纯的 String 类型,并不足以满足我们的需求啦!因此,在 String 类型的基础上,又衍生出了两个字符串构建器 StringBuffer 和 StringBuilder。对于这三种类型,无论是在求职面试的过程中,还是在日后的实际工作中,都是需要我们经常面对的,因此了解她们之间的区别就显得尤为重要啦!

2 String

通过阅读“1 简介”,我们已经大致了解了 String 类型啦!说她是一个数据类型,但她并不是基本数据类型,而是一个被 final 修饰的、不可被继承的类,位于 java.lang 包。至于如何使用 String 类型,有两种方法,一是直接赋值,二是用 new 创建,具体示例如下:

// 1、直接赋值
String str1 = "维C果糖";

// 2、用 new 运算符创建
String str2 = new String("维C果糖");

在常见的字符串操作中,判断两个字符串是否相等尤为常见,且常用的判别方式有两种,即用 String 类提供的方法 equals 和 == 运算符,在博文“Java 语言中 equals 和 == 的区别”中,作者详述了两者的区别,有兴趣的童鞋可以参考参考。接下来,作者将介绍一些使用频率比较高的 String 类的 API 方法:

boolean endsWith(String suffix)
//* 如果字符串以 suffix 结尾,则返回 true,否则返回 false */

boolean equals(Object other)
/* 如果字符串与 other 相等,则返回 true,否则返回 false */

boolean equalsIgnoreCase(String other)
/* 如果字符串与 other 相等(忽略大小写),则返回 true,否则返回 false */

int length()
/* 返回字符串的长度 */

String replace(CharSequence oldString, CharSequence newString)
/* 返回一个新字符串,这个字符串用 newString 字符串代替原始字符串中所以的 oldString 字符串,可以用 String 或者 StringBuilder 对象作为 CharSequence 参数 */

boolean startsWith(String prefix)
/* 如果字符串以 prefix 开始,则返回 true,否则返回 false */

String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
/* 返回一个新字符串,这个字符串包含原始字符串中从 beginIndex 到串尾或 endIndex-1 位置的所以代码单元 */

String toLowerCase()
/* 返回一个新字符串,这个字符串将原始字符串中的所以大写字母都改成了小写字母 */

String toUpperCase()
/* 返回一个新字符串,这个字符串将原始字符串中的所以小写字母都改成了大写字母 */

String trim()
/* 返回一个新字符串,这个字符串将删除元字符串头部和尾部的空格 */

3 StringBuffer

在我们了解了 String 类之后,我们会发现她有些缺陷,例如当我们创建了一个 String 类的对象之后,我们很难对她进行增、删、改的操作,为了解决这个弊端,Java 语言就引入了 StringBuffer 类。StringBuffer 和 String 类似,只是由于 StringBuffer 的内部实现方式和 String 不同,StringBuffer 在进行字符串处理时,不用生成新的对象,所以在内存的使用上 StringBuffer 要优于 String 类。

在 StringBuffer 类中存在很多和 String 类一样的方法,这些方法在功能上和 String 类中的功能是完全一样的。但是有一个非常显著的区别在于,StringBuffer 对象每次修改都是修改对象本身,这点是其和 String 类的最大区别。

此外,StringBuffer 是线程安全的,可用于多线程。而且 StringBuffer 对象的初始化与 String 对象的初始化不大一样,通常情况下,我们使用构造方法进行初始化,即:

// 声明一个空的 StringBuffer 对象
StringBuffer sb = new StringBuffer();

// 声明并初始化 StringBuffer 对象
StringBuffer sb = new StringBuffer("维C果糖");

// 下面的赋值语句是错的,因为 StringBuffer 和 String 是不同的类型
StringBuffer sb = "维C果糖";

// 下面的赋值语句也是错的,因为 StringBuffer 和 String 没有继承关系
StringBuffer sb = (StringBuffer)"维C果糖";

// 将 StringBuffer 对象转化为 String 对象
StringBuffer sb = new StringBuffer("维C果糖");
String str = sb.toString();

接下来,介绍一些 StringBuffer 常用的 API 方法:

StringBuffer()
/* 构造一个空的字符串构建器 */

int length()
/* 返回构建器或缓冲器中的代码单元(字符)数量 */

StringBuffer append(String str)
/* 追加一个字符串并返回一个 this */

StringBuffer append(Char c)
/* 追加一个字符并返回一个 this */

void setCharAt(int i, char c)
/* 将第 i 个代码单元设置为 c */

StringBuffer reverse()
/* 将构建器的内容进行顺序的反转 c */

String toString()
/* 返回一个与构建器或缓冲器内容相同的字符串 */

4 StringBuilder

在 JDK 5.0 之后,Java 语言又引入了 StringBuilder 类,这个类的前身是 StringBuffer,其效率略微有些低,但允许采用多线程的方式执行添加或者删除字符的操作。如果所有的字符串在一个单线程中(通常都是这样)编辑,则应该用 StringBuilder 代替她,这两个类的 API 是完全相同的。因此,在本部分,作者就不再赘言啦!

5 总结

通过以上的介绍,咱们已经详细的了解了 String、StringBuffer 和 StringBuilder,也知道了她们三个都是用于操作字符串的类。接下来,作者大致总结一些三者的区别,以供参考:

  1. 对于操作效率而言,一般来说,StringBuilder > StringBuffer > String;
  2. 对于线程安全而言,StringBuffer 是线程安全的,可用于多线程;而 StringBuilder 是非线程安全的,用于单线程;
  3. 对于频繁的字符串操作而言,无论是 StringBuffer 还是 StringBuilder,都优于 String。

此外,通过 String 创建的对象的是不可变的,而通过 StringBuffer 和 StringBuilder 创建的对象是可以变的,这里的变与不变,指的是字符串的内容和长度。如果为了应对面试,能够记住以上内容的话,我想足够答的 perfect 啦;但是如果在实际开发中,如何选择,则要具体情况具体分析啦!

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Java  #   # String、StringBuffer  #   # StringBuilder  #   # 区别  # 对比  # Java源码深度分析String与StringBuffer及StringBuilder详解  # java中String StringBuffer和StringBuilder的区别详解  # java中String、StringBuffer与StringBuilder的区别  # java String、StringBuilder和StringBuffer的区别详解  # java 中String和StringBuffer与StringBuilder的区别及使用方法  # Java 中String StringBuilder 与 StringBuffer详解及用法实例  # 详解Java中String  # StringBuffer和StringBuilder的使用  # 都是  # 是在  # 多线程  # 有两种  # 单线程  # 改成了  # 类中  # 的是  # 运算符  # 是一个  # 我想  # 但是在  # 可用于  # 出了  # 多个  # 很难  # 基础上  # 一是  # 在实际  # 可以用 


相关文章: 如何在万网自助建站中设置域名及备案?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  c++怎么用jemalloc c++替换默认内存分配器【性能】  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  如何在IIS7中新建站点?详细步骤解析  桂林网站制作公司有哪些,桂林马拉松怎么报名?  建站之星ASP如何实现CMS高效搭建与安全管理?  如何在七牛云存储上搭建网站并设置自定义域名?  大同网页,大同瑞慈医院官网?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何通过虚拟机搭建网站?详细步骤解析  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何注册花生壳免费域名并搭建个人网站?  网站制作企业,网站的banner和导航栏是指什么?  如何设计高效校园网站?  制作旅游网站html,怎样注册旅游网站?  如何在云虚拟主机上快速搭建个人网站?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  建站之星后台管理系统如何操作?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  javascript中的try catch异常捕获机制用法分析  如何快速搭建响应式可视化网站?  建站之星代理如何获取技术支持?  上海网站制作开发公司,上海买房比较好的网站有哪些?  ,有什么在线背英语单词效率比较高的网站?  如何通过虚拟主机快速搭建个人网站?  建站主机是否等同于虚拟主机?  常州企业建站如何选择最佳模板?  Bpmn 2.0的XML文件怎么画流程图  如何用景安虚拟主机手机版绑定域名建站?  北京网站制作公司哪家好一点,北京租房网站有哪些?  一键网站制作软件,义乌购一件代发流程?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  广东企业建站网站优化与SEO营销核心策略指南  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  创业网站制作流程,创业网站可靠吗?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何快速重置建站主机并恢复默认配置?  建站之星代理平台如何选择最佳方案?  建站之星在线客服如何快速接入解答?  如何在阿里云部署织梦网站?  建站之星×万网:智能建站系统+自助建站平台一键生成  企业微网站怎么做,公司网站和公众号有什么区别?  内部网站制作流程,如何建立公司内部网站?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何快速查询网站的真实建站时间? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。