String、StringBuffer、StringBuilder三者的区别

2023-10-26

在前面的文章中,我们已经分别介绍了String、StringBuffer、StringBuilder三者的基本使用,还不懂String、StringBuffer、StringBuilder这三个类是如何使用的,可以先去看看之前的文章:Java:String类的使用

本文主要是介绍String、StringBuffer、StringBuilder之间的区别。


在前面的文章中,我们知道了String是具有不可变性的,由此我们就引出了可变性的StringBuffer类和StringBuilder类。

实际上,这三者在我们日常写代码的过程中都是会经常使用到的,那么既然其他两个类都是可变的,为什么我们还要使用String类呢?直接全部使用其他两个类不好吗?感觉使用String类有这么多的局限性,不可变对象到底有什么好处呢?

对于这种种的疑问,其实总结出来就是:为什么String要设计成不可变的?
原因有三:

  1. 方便实现字符串对象池,如果String可变,那么对象池就需要考虑写时拷贝的问题
  2. 不可变对象是线程安全的
  3. 不可变对象更方便缓存hashcode,作为key时可以更高效率地保存到HashMap中

那么对于StringBuffer类和StringBuilder类,他们是可以进行修改的,实际上他们的大部分功能也都是相同的,其中,最主要的区别就是:StringBuffer采用了同步处理,属于线程安全的操作;而StringBuilder并未采用同步处理,因此是属于线程不安全操作,这也是这两个类之间最大的区别点(关于线程安全但是知识点到后面学习到了在做解释)。


这时候可能有人会说:StringBuffer既是可修改的,又是线程安全的,那还要String类和StringBuilder类干嘛呢?之间全部使用StringBuffer不就行了吗?

其实String和StringBuilder中有一些其他东西是StringBuffer说不具备的,往往这些都是要通过代码的具体实现来决定的,不能一棒子打死说全部都使用StringBuffer,很显然是不恰当的,String在Java源码中出现的地方比比皆是,只能够说,在实现中写代码比较经常使用的是StringBuffer。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

String、StringBuffer、StringBuilder三者的区别 的相关文章

随机推荐

  • flutter如何实现点击事件

    在Android中 您可以通过调用方法setOnClickListener将OnClick绑定到按钮等view上 在Flutter中 有两种方法 1 如果Widget支持事件监听 则可以将一个函数传递给它并进行处理 例如 RaisedBut
  • 华硕飞行堡垒进入bios

    1 关机重启 在重启时一直按住F2进入如下页面 2 按下F7 进入如下页面 3 通过移动键盘右键 gt 键 使界面来到Advanced 4 通过移动键盘下键 移动到Advanced中的SVM Mode 通过Enter键进行下拉选取 入下图小
  • unity知识学习(一)巨型太阳---组件Lens Flare的运用

    unity关于在天空设置一个巨型太阳 组件Lens Flare的运用 介绍 unity版本 如何制作巨型太阳 最基本的操作 如何制作巨型太阳 关键操作 我制作好的巨型太阳 介绍 本次知识前面比较简单 因此将基本操作和关键点操作分开 读者可方
  • CSS 实现文字渐变色

    1 background 属性设置渐变色 1 源码示例 text background image linear gradient to right pink purple color transparent webkit backgrou
  • eclipse New Server Runtime Environment 列表中没有 Apache Tomcat

    该问题主要原因可能是 Eclipse插件不全引起 按以下步骤安排插件即可 1 点击工具栏上的Help gt Install New Software 2在弹出的对话框的 Work with 输入 http download eclipse
  • 检查你的电脑是否支持硬件虚拟化技术

    有时候需要知道电脑是否支持硬件虚拟化技术 这种情况可能需要在在windown7系统上装MacOS 系统 通过使虚拟机 在虚拟机上安装出现如下问题是 首先 在更改你的BIOS设置之前 检测你的处理器是否支持硬件虚拟化技术 下载 securab
  • 等和子数组最小和(Java)

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组nums 数据范围 1 lt m lt 50 1 lt nums i lt
  • ElasticSearch从入门到精通:常用操作

    hello 大家好 我是 Jackpop 硕士毕业于哈尔滨工业大学 曾在华为 阿里等大厂工作 如果你对升学 就业 技术提升等有疑惑 不妨交个朋友 我是Jackpop 我们交个朋友吧 在前面这一部分 我已经解释了ElasticSearch的基
  • 51单片机四个并行I/O接口

    P0口 功能1 作为正常的并行I O接口 P1 P2 P3原理相同 控制端C 0 MUX开关向下 经过与门 T1截止 P0口作为输出口时 a 需要在三极管T2上部添加上拉电阻如图所示 b 内部总线输出数据为1 经过Q非得0 再经过MUX开关
  • 用python将时间序列信号或一维数组 转化成 图像的几种方法

    用python将时间序列信号或一维数组转化成图像的几种方法 深度学习在计算机视觉有了非常广泛的应用 视觉图像数据为二维数据 而在故障诊断领域的数据 来自于传感器的采集 属于典型的一维时间序列 因而绝大多数问题可以抽象成时间序列分类 TSC
  • Unity官方FPS教程解析(二)

    在上一篇文章中我们只是初步了解了这个游戏层次构造的一部分 今天我们继续上一章的内容吧 Enemy 两个enemy本质上没有差别 所以就其中一个来说说吧 Enemy Turret 这个初始场景的boss 一个站桩型敌人 当选中其根物体后我们可
  • Linux下SPI驱动详解及示例代码

    SPI Serial Peripheral Interface 是一种常用的串行通信协议 广泛应用于嵌入式系统中 在Linux系统中 SPI驱动负责管理和控制与SPI总线设备的通信 本文将详细介绍Linux下SPI驱动的工作原理 并提供示例
  • MES生产管理系统原型 MES产品原型 Axure产品原型

    MES生产管理系统原型 MES产品原型 Axure产品原型 1 生产管理 包括生产订单 生产计划 生产工单 工序任务单 报工记录 可提供高效的生产排程 2 质检管理 包括质检单 质检方案 检验项目 检验组管理 可提升质量追溯水平 3 库存管
  • uniapp tababr凸出图标已经自定义tabbar

    uniapp关于tabbar的文档 现在我想tabbar中间的显示为凸出的图标 类似下图 只需要在app中使用 不用兼容小程序的话 可以使用官方的midButton配置项 该配置项不兼容各种小程序 midButton height 70px
  • vue中使用el-upload组件修改上传的图片时,每次都会自动闪过上一次的图片

    引言 在进行vue后台管理系统开发的时候又遇到了这个问题 由于上次没有写文章记录 所以还是查看了之前写的项目才解决这个问题 遇到的问题 我将上传的表单单独作为一个组件 假设为A页面 然后在另外一个页面 假设为B页面 中使用Dialog来显示
  • 数据清洗,数据分析,数据挖掘的区别

    数据清洗 是指对原始数据进行预处理 包括去重 去噪 填充缺失值 处理异常值等操作 以提高数据的质量和可用性 保证分析和挖掘的可靠性 数据清洗是数据处理的基本步骤 也是数据分析和数据挖掘的前提 数据分析 是指利用统计学和数据科学技术对数据进行
  • linux 开发设计软件,在Linux平台下开发和设计聊天软件

    在网络无所不在的今天 在Internet上 有ICQ MSN Gtalk OICQ等网络聊天软件 极大程度上方便了处于在世界各地的友人之间的相互联系 也使世界好像一下子缩小了 不管你在哪里 只要你上了网 打开这些软件 就可以给你的朋友发送信
  • Python-第三方库的国内源

    清华 https pypi tuna tsinghua edu cn simple 阿里云 http mirrors aliyun com pypi simple 中国科技大学 https pypi mirrors ustc edu cn
  • 【WSL】[04]从C盘解放出来WSL的linux镜像

    前言 C盘的硬盘资源有限 虚拟机的需求无限 所以 要把无限的硬盘需求搞到其他盘去才行啊 方案1 利用工具 move wsl 1 管理员运行PowerShell 创建WSL的工作目录 移动前 C盘的空间大小 base PS C WINDOWS
  • String、StringBuffer、StringBuilder三者的区别

    在前面的文章中 我们已经分别介绍了String StringBuffer StringBuilder三者的基本使用 还不懂String StringBuffer StringBuilder这三个类是如何使用的 可以先去看看之前的文章 Jav