String和StringBuilder、StringBuffer

2023-11-15

1,Srring:

    对于String来说,是把数据存放在了常量池中,因为所有的String,默认都是以常量形式保存,且由final修饰,因此在线程池中它是线程安全的。因为每一个String当被创建好了以后,他就不再发生任何变化,但是它的执行速度是最差的。
我们要创建String的时候,他在常量池中对这些信息进行处理,如果在程序中出现了大量字符串拼接的工作,效率是非常底下的。
因此使用场景是在少量字符串操作的时候才建议直接使用String来操作。
2,StringBuffer:   

     StringBuffer相对于StringBuilder效率要相对低一点,但也远比String要高的多。效率低的原因:对于StringBuffer来说更多的考虑到了多线程的情况,在进行字符串操作的时候,它使用了synchronize关键字,对方法进行了同步处理。
因此StringBuffer适用于多线程环境下的大量操作。

3,StringBuilder:

      线程安全与线程不安全:
在进行多线程处理的时候,如果多个线程对于这一个对象同时产生操作,会产生预期之外的结果。对于StringBuilder来说,执行效率虽然高,但是因为线程不安全,所以不建议在多线程的环境下对同一个StringBuilder对象进行操作。
因此StringBuilder适用于单线程环境下的大量字符串操作。
 


三者的区别:

    1,可变性:String中的value值是被final修饰的,所以它是一个不可变的类,每次想要修改string的值时,都会产生新的对象。而另外两个是可变类,字符串的变更不会产生新的对象。

    2,线程安全:因为String是不可变的类,不会对同一个对象进行修改,所以是线程安全的。StringBuffer的每个操作方法都用synchronized关键字修饰加锁,所以是线程安全的。而StringBuilder是线程不安全的。

    3,性能:String是最低的,因为不可变,所以每次修改都需重新创建对象和分配内存,再者是StringBuffer的性能次之,因为可变无需再重新创建对象,但同时又应为加锁,所以性能比StringBuilder差,最好的是StringBuilder。

     4,存储位置:String是存储再字符串常量池中的,而StringBuffer和StringBuilder是存储在堆内存上的。

注意:StringBuffer和StringBuilder都是派生于AbstractStringBuilder这个抽象类。

   

 

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

String和StringBuilder、StringBuffer 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • MySQL高性能及性能优化技巧---更适合开发人员

    更新次数 更新时间 首发 2021 10 25 第一次更新 2021 10 26 1 删除了书中大量不必要的存储引擎类型 2 摘要完毕Mysql架构与历史部分 第二次更新 2021 10 29 1 摘要基准测试内容 2 删除了大量对概念的举
  • hdu 6208 The Dominator of Strings

    Problem acm hdu edu cn showproblem php pid 6208 Meaning 有 n 个字符串 问是否能找到其中一串 使得其它串都是它的子串 Analysis 如果存在这个串 那它一定是 n 个中的最长串
  • LeetCode刷题记录 字节跳动题库

    1 两数之和 哈希 一遍遍历 3 无重复字符的最长子串 哈希 流动窗口 双指针 因为右端点的位置一定不会朝左边走 建议再看看同类型的题目 2 两数相加 题 42 接雨水 单调递减栈 核心思想 对于每个点找其左边和右边第一个大于或等于它的点
  • 程序员最美的情人节玫瑰花,JAVA代码实现的3D玫瑰噢

    用纯javascript脚本编写的神奇3D圣诞树 令人印象深刻 2月14日情人节就要来临了 还是Roman Cortes 这次他又带来了用javascript脚本编写的红色玫瑰花 用代码做出的玫瑰花 这才是牛逼程序员送给女友的最好情人节礼物
  • idea自动去除导入但未使用的包

    使用idea开发过程中通常我们可能会引入某个包使用但是在后续更改中这个包就不需要了 一个个去除很麻烦 他每个java文件去除的快捷键是ctrl shift o 如果想要更智能的方法我们可以做如下配置 1 使用ctrl alt s进入sett
  • 【机器学习-分类】决策树预测

    我用一些机器学习的算法对数据进行一个分类 下面是一些需要用到的基础代码 以决策树为例 并不包括针对项目的模型处理和修改 留作记忆学习 对于数据划分训练集直接省略 def Tree score depth 3 criterion entrop
  • 论文笔记 Graph Attention Networks

    2018 ICLR 1 intro 1 1 GCN的不足 无法完成inductive任务 inductive任务是指 训练阶段与测试阶段需要处理的graph不同 通常是训练阶段只是在子图上进行 测试阶段需要处理未知的顶点 GGN 的参数依赖
  • SQL注入1(联合注入)

    数据库基础 一 数据库的操作 1 基本语句 mysql u xxx 进入mysql show databases 查看所有库名 use XXX 进入某个库 show tables 查看库的表 查询语句 select 数据操作语句 inser
  • echarts分割柱形图实现渐变电量效果柱状图

    先看下效果图是这个样子的 和普通的柱状图最明显的区别就是需要做成类似于电池格电量显示效果 目录 1 官网找例子 2 改造示例 3 全部代码 4 初始效果和完成效果对比 1 官网找例子 首先到Echarts官网找到基础的柱状图 官网初始opt
  • ZABBIX实践(三) window下的Agent端部署以及服务端汉化

    Zabbix 可以监控的对象非常多 支持的操作系统也很多 主流的linux和windows是平时接触最多的系统 本节说明一下zabbix 在windows下如何安装和配置 1 目标 1 在windows上安装zabbix agent 并且进
  • 用python做透视表_python制作数据透视表pivot_table方法详解

    数据透视表 Pivot Table 是一种交互式的表 可以进行某些计算 如求和与计数等 所进行的计算与数据跟数据透视表中的排列有关 之所以称为数据透视表 是因为可以动态地改变它们的版面布置 以便按照不同方式分析数据 也可以重新安排行号 列标
  • 3.2.spring boot 日志框架logback使用示例

    给类路径下放上每个日志框架自己的配置文件即可 SpringBoot就不使用他默认配置 slf4j 的了 logback xml 直接可被日志框架识别 logback spring xml 日志框架就不直接加载日志的配置项 由SpringBo
  • fx5u 脉冲输出指令PLSY(DPLSY)4种写法

    本文描述三菱FX5U的 脉冲输出指令PLSY DPLSY 4种写法 都有效 第一行 设置脉冲输出频率 第二行 DPLSY D0 K0 K1 FX5U 第二个参数是脉冲数量 设置为K0表示一值输出脉冲 第三个参数是轴号K1 表示Y0脉冲输出
  • C语言——数据在内存中的存储(上)

    数据在内存中的存储 1 数据类型的介绍 之前已经介绍过C语言中的基本数据类型了 主要有 char 字符数据类型 short 短整型 int 整形 long 长整型 long long 更长的整形 float 单精度浮点数 double 双精
  • Win10下AI CC 2019安装教程(超级详细-小白版)

    下载 Adobe Illustrator CC 2019 百度网盘下载地址 链接 https pan baidu com s 1i5MeAOu8 wrSep0nOy8OCA 提取码 k9gm 打开上面链接 用百度网盘软件下载 安装 右键压缩
  • 设计模式:建造者模式

    无论是在现实世界中还是在软件系统中 都存在一些复杂的对象 它们拥有多个组成部分 如汽车 它包括车轮 方向盘 发送机等各种部件 而对于大多数用户而言 无须知道这些部件的装配细节 也几乎不会使用单独某个部件 而是使用一辆完整的汽车 可以通过建造
  • NoSQL数据库简介

    目录 1 NoSQL数据库概述 2 NoSQL适用场景 3 NoSQL不适用场景 4 缓存数据库 1 Memcached 2 Redis 3 mongoDB 5 列式数据库 1 行式存储数据库和列式存储数据库 1 行式存储数据库 2 列式存
  • Redis Hyperloglog(浅析)

    在Redis中 每个HyperLogLog键只需要花费12KB内存 就可以计算接近2 64个不同的基数 HyperLogLog只能统计基数的大小 也就是数据集的大小 集合的个数 他不能存储元素的本身 不能向set集合那样存储元素本身 也就是
  • mybatis实战教程(mybatis in action),mybatis入门到精通

    原文地址 http blog csdn net techbirds bao article details 9233599 这个mybatis教程也不错 http limingnihao iteye com blog 781671 MyBa
  • String和StringBuilder、StringBuffer

    1 Srring 对于String来说 是把数据存放在了常量池中 因为所有的String 默认都是以常量形式保存 且由final修饰 因此在线程池中它是线程安全的 因为每一个String当被创建好了以后 他就不再发生任何变化 但是它的执行速