String、StringBuilder和StringBuffer的区别以及应用场景

主要从以下几个角度来讨论区别和应用场景:

一、底层存储方面

String:是一个只读字符串,底层是final修饰的数组,不可被继承,存储在字符串常量池中。每次进行拼接操作时,底层会隐式new一个 StringBuilder对象,然后利用append()方法进行拼接,返回时调用toString()方法。

jdk1.8:使用char[]来存储数据  private final char[] value;
jdk1.9: 使用byte[]来存储数据  private final byte[] value;
char修改为byte的原因:因为char2字节的,当存储字符(ISO-8859-1编码是单字节编码)时,会浪费一个
空间,存储汉字字符则正好;为了节省空间,利用byte进行存储,如果要存储中文字符应该怎么办呢?定义了
一个coder属性,默认有01两个值:
-- 如果string判断字符串只有latin-1(ISO-8859-1、单字节编码)时,默认为0;
-- 只有utf16(双字节编码),默认为1.
//用coder标示字符串中所有的字符是不是都可以用一个字节表示,它的值只有两个
LATIN1:标示所有字符都可以用一个字节表示;
UTF16:标示字符串中部分字符需要两个字节表示。
private final byte coder;public int length() {return value.length >> coder;
}

StringBuilder和StringBuffer:生成的对象存储在

  1. 都继承AbstractStringBuilder类;
  2. 采用模板设计模式进行整体设计;
  3. 默认大小为16,扩容倍数为2倍。

二、线程安全性

String:是final修饰的对象,不可变,因此是线程安全的;
StringBuilder:非线程安全的;
StringBuffer:线程安全的,每个方法都加了Synchroized锁。

三、性能方面

String:final修饰的不可变对象,每次进行字符串拼接、截取等修改操作时,底层都会重新申请内存,生成新的对象,因此效率最低
StringBuilder:是可变的类,效率最高
StringBuffer:是可变的类,但每个方法都加了Synchroized锁,效率低于StringBuilder。

四、应用场景

String:字符串不经常变化的场景中,比如常量的声明、少量的字符串操作中;
StringBuilder: 频繁进行字符串运算(拼接、删除以及插入等),且为单线程的环境;
StringBuffer:频繁进行字符串运算(拼接、删除以及插入等),且为多线程的环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

密码解密 C卷(100%用例)(JavaPythonC++Node.jsC语言)

给定一段“密文“字符串s,其中字符都是经过"密码本”映射的,现需要将"密文"解密并且输出 映射的规则(a-i)分别用(1-9)表示;(j-z")分别用(10-"26”)表示 约束:映射始终唯一 输入描述: “密文”字符串 输出描述: 明文字符串 补充说明: 翻译后的文本…

flutter选择国家或地区的电话号码区号

1.国家区号列表(带字母索引侧边栏) import package:generated/l10n.dart; import package:widget/login/area_index_bar_widget.dart; import package:flutter/material.dart; import package:flutter_screenutil/flutter_screenutil.dart;class LoginA…

实现更高能效的汽车级低边驱动器NRVB140ESFT1G 带温度和电流限制 自保护低压侧驱动器

一起去了解关于汽车电子AEC Q101车规认证!!! 是一种针对分立半导体的可靠性测试认证程序,由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性…

(2022级)成都工业学院Java程序设计(JAVA)实验一:编写一个简单的Java程序

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求,请寻求其他的途径 运行环境 window11家庭版 IntelliJ IDEA 2023.2.2 jdk17.0.6 实验要求 1、 控制台菜单。要求如下: 1)…

Docker容器化技术(互联机制实现便捷互访)

容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。 1.自定义容器命名 连接系统依据容器的名称来执行。因此,首先需要自定义一…

DataFunSummit 2023因果推断在线峰会:解码数据与因果,引领智能决策新篇章(附大会核心PPT下载)

在数据驱动的时代,因果推断作为数据科学领域的重要分支,正日益受到业界的广泛关注。DataFunSummit 2023年因果推断在线峰会,汇聚了国内外顶尖的因果推断领域专家、学者及业界精英,共同探讨因果推断的最新进展、应用与挑战。本文将…

人工智能的迷惑行为:一场技术与期望的较量

目录 写在开头1. 人工智能迷惑行为的现象1.1 智能助手的理解误区1.2 自动翻译的奇妙旅程1.3 在线客服的困惑回答1.4 图像识别的惊奇误会1.5 自动作文生成器的创意外溢1.6 生成式绘画AI的“艺术创作”1.7 音乐创作AI的奇特旋律1.8 自动生成的小说情节1.9 生成式AI写诗 2 导致迷惑…

天星数科立足专业,持续深化金融科技赋能产业

党的二十大报告提出“建设现代化产业体系”,要求“坚持把发展经济的着力点放在实体经济上”。这是站在改革开放40多年发展实践基础上,实现第二个百年奋斗目标作出的战略部署。天星数科作为深耕金融服务多年的科技公司,聚焦主业、立足于专业&a…

Python基础学习(6)函数基础与函数参数

文章目录 一.认识参数1.特点2.优点 二.定义函数三,函数参数1.必备参数2.默认参数3.不定长参数①不定长参数1②不定长参数2 四,返回值(return)五,文档字符串1.**作用**:2.**语法格式:**3.输出方式: Python基础学习(1)基本知识 Python基础学习(2)序列类型方法与数据类型转换 Pyth…

数字媒体专业AR增强现实仿真模拟实训

增强现实技术是一种利用计算机生成的图像、声音、传感器数据等多媒体信息,实时地与用户所处的真实环境相结合,为用户提供一种身临其境的体验。这种技术广泛应用于游戏、娱乐、旅游等领域,现在也逐渐在教育领域崭露头角。 二、数字媒体专业运用…

[MYSQL数据库]--表内操作(CURD)

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、表的 Cre…

Sklearn线性回归

Scikit-learn 中的线性回归是一个用于监督学习的算法,它用于拟合数据集中的特征和目标变量之间的线性关系。以下是使用 Scikit-learn 实现线性回归的基本步骤: 1. 导入所需库 首先,你需要导入所需的库和模块。 import numpy as np import …

蓝桥杯历年真题省赛之 2016年 第七届 生日蜡烛

一、题目 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意&…

Mybatis的XML配置文件

Xml文件中写SQL 为什么要学? 学习了Mybatis中XML配置文件的开发方式了,大家可能会存在一个疑问:到底是使用注解方式开发还是使用XML方式开发? 官方说明:https://mybatis.net.cn/getting-started.html 结论:使用Myba…

【数据集】2023自动驾驶开源数据集-学习笔记

文章目录 1. 自动驾驶有哪些公开数据集2. 预测相关的数据集有哪些 1. 自动驾驶有哪些公开数据集 waymo open dataset 适应任务: 域适应,2D追踪,2D检测,3D追踪,3D检测,实时2D检测,实时3D检测,交互…

Python3 @get_time 装饰器

Python get_time 装饰器 get_time 装饰器可以用于计算函数的执行时间。 示例: import timedef get_time(func):def wrapper(*args, **kwargs):start_time time.time()func(*args, **kwargs)end_time time.time()print(f"函数 {func.__name__} 执行时间&am…

【数据挖掘】实验2:R入门2

实验2&#xff1a;R入门2 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握R数据类型。 2&#xff1a;熟悉和掌握R语言的数据读写。 二&#xff1a;实验内容 1&#xff1a;R数据类型 【基本赋值】 Eg.1代码&#xff1a; x <- 8 x Eg.2代码&#xff1a; a city …

php7.3.4连接sqlserver(windows平台)

前言 有个项目需要手上laravel连接客户的sqlserver数据库读取数据&#xff0c;故在本地开发的lnmp环境中&#xff0c;php需要增加扩展 过程 从微软官网下载sqlsrv扩展,注意注意php版本&#xff0c;下载地址 解压的文件会有nts和ts两个版本&#xff0c;本地打开phpinfo查看 将…

基于SSM框架的理发店管理系统的设计与实现【附项目源码】分享

基于SSM框架的理发店管理系统的设计与实现&#xff1a; 源码地址&#xff1a;https://download.csdn.net/download/qq_41810183/88842785 理发店管理系统设计与实现需求文档 一、引言 随着信息技术的发展和普及&#xff0c;各行业都在寻求信息化管理以提升服务效率与用户体验…

基于Springboot影城管理系统设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…