String类、StringBuffer类、StringBuilder类的区别

String是Java中基础且重要的类,并且String也是Immutable类的典型实现,被声明为final class,除了hash这个属性其它属性都声明为final,因为它的不可变性,所以例如拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。

StringBuffer就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类,提供append和add方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列,把所有修改数据的方法都加上了synchronized。但是保证了线程安全是需要性能的代价的。

在很多情况下我们的字符串拼接操作不需要线程安全,这时候StringBuilder登场了,StringBuilder是JDK1.5发布的,它和StringBuffer本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。

StringBuffer 和 StringBuilder 二者都继承了 AbstractStringBuilder ,底层都是利用可修改的char数组(JDK 9 以后是 byte数组)。

所以如果我们有大量的字符串拼接,如果能预知大小的话最好在new StringBuffer 或者StringBuilder 的时候设置好capacity,避免多次扩容的开销。扩容要抛弃原有数组,还要进行数组拷贝创建新的数组

String是一个不可变的字符序列,字符串常量
StringBuffer是一个可变的字符序列 ,字符串变量(线程安全)
StringBuilder 是一个可变的字符序列 ,字符串变量(非线程安全)

String对象值的修改都是重新创建一个新的对象,然后把新的值保存进去
StringBuffer类对象,每次返回的都是原对象,可以通过append()方法来修改值

String对象底层重写了hascode和equals
StringBuffer对象底层未重写了hascode和equals

StringBuffer性能比String高
StringBuffer是线程安全的

无参构造方法,Sting为空字符初始容量为0,StringBuffer初始容量为16


StringBuffer和StringBuilder的区别

StringBuffer 线程安全 同步的 速度慢
StringBuilder 线程不安全 非同步的 速度快

在java中有4个类来负责字符的操作。

  • 1.Character 是进行单个字符操作的,
  • 2.String 对一串字符进行操作,不可变类。
  • 3.StringBuffer 对一串字符操作,可变类
  • 4.StringBuilder 对一串字符操作,可变类

1.可变与不可变

 String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。private final char value[];我的理解:String对象不可变:比如 String aa = new String("hello"); //新建一个String对象,指向一个地址,地址上的值是"hello";  aa = "world";//新取一段地址空间(不是原来的),值是"world",aa指向这个新的地址aa += "!";//新取一段地址空间(不是原来的),值是"world!",aa指向这个新的地址//所以说String值每修改一次,内存里就会新建一个字符串,String对象指向的地址也会发生改变StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。
char[] value;

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

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

相关文章

360深度实践:Flink与Storm协议级对比

戳蓝字“CSDN云计算”关注我们哦!文 | 张馨予 来源 | 高可用架构作者 张馨予,360 大数据计算平台负责人。北京邮电大学硕士,2015年加入360系统部,一直致力于公司大数据计算平台的易用性、稳定性和性能优化的研发工作。目前主要负…

Spring Cloud Alibaba 雪崩效应和容错解决方案

Spring Cloud Alibaba 雪崩效应和容错解决方案 文章目录1. 雪崩效应1.1. 举个例子:2. 常见的容错方案:2.1.超时:2.2. 限流:2.3. 仓壁模式:2.3.1. 现实中的仓壁模式:2.3.2. 软件中的仓壁模式:2.4…

layui获得列表json数据_golang实战开发之博客功能篇:文章列表的读取与展示和分类筛选展示处理...

前面我们介绍了文章详情页面的展示的逻辑代码实现,这一节,我们将继续讲解文章列表的读取和展示、文章根据分类进行筛选、最新文章、热门文章等的调用处理逻辑。首先,我们先编写文章列表页的前端代码。这里,我们文章采用类似WordPr…

“智企云中享“,首届SAP中国云大会召开

2019 年 6 月 5 日,上海讯— 今日,首届SAP云大会在上海盛大召开。作为SAP云计算家族在中国的首秀,大会全面呈现了SAP云业务的战略、产品、商业场景、浸入式体验。作为体验管理领域的领导者,SAP以覆盖企业运营全价值链的云服务解决…

SpringBoot入门到精通_第7篇 _必知必会总结

接上一篇:SpringBoot入门到精通_第6篇 _必知必会

java对mysql读写权限设置_Java学习笔记——MySQL开放3306接口与设置用户权限

系统Ubuntu16.04 LTS1、开放3306端口查看端口状态:netstat -an|grep 3306tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN目前只有本机可以访问输入指令:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf如果之前配置过全局配置文件,也可输入指令:su…

容器精华问答 | 如何进行跨机器的Container做Link ?

戳蓝字“CSDN云计算”关注我们哦!云计算的发展日新月异,新技术层出不穷,尤其容器技术自2013年Docker容器问世以来一路高歌猛进红遍大江南北,与虚拟机相比,容器更显优势,有着更轻量、更快捷、占用资源更少&a…

Sublime Text3 多行合并为一行

快捷键说明CTRL J多行合并为一行ctrld双击选中关键词或者关键词部分,在输入快捷键关键字就会一个一个选中,就可以同时编辑

安卓psp模拟器哪个好_psp模拟器安卓完美版下载_psp模拟器完美版手机版下载_玩游戏网...

《psp模拟器完美版》App是专业的PSP游戏模拟器,兼容适配任何安卓机型,用户下载于此畅玩PSP游戏,还可自制游戏,能够自由设置多国语言,更改图像、声音、控制、网络等多种选项设置,想玩好游戏,玩打…

腾讯也有“神盾局”?秀出“技术肌肉”就靠TA了……

戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!漫威的超级英雄世界中,“神盾局”一直凭借着不少的先进武器装备&#xff0…

Spring 集成 mybatisPlus

文章目录1. pom.xml2. 实体类3. mapper接口4. applicationContext.xml5. db.properties6. log4j.xml7. mybatis-config.xml8. 测试类9. 控制台输出10. 源码地址1. pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://ma…

用python编excel统计表_Python实现对excel文件列表值进行统计的方法

本文实例讲述了Python实现对excel文件列表值进行统计的方法。分享给大家供大家参考。具体如下&#xff1a;#!/usr/bin/env python#codinggbk#此PY用来统计一个execl文件中的特定一列的值的分类import win32com.clientfilenameraw_input("请输入要统计文件的详细地址&#…

大话云存储,这个“对象”可能无处不在

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | pasca来源 | 蛋蛋团&#xff08;ID&#xff1a;dandan_tuan&#xff09;大纲前言1、Who&#xff1a;谁使用对象存储2、What&#xff1a;对象存储是什么3、Why&#xff1a;为什么他们会使用对象存储4、how to do:应用场景分析5、…

linux java文件 core_linux下部署.net core/java

.net core1.查看系统是否已安装net core命令&#xff1a;dotnet --info如果提示未找到命令&#xff0c;说明需要按照net core环境&#xff0c;否则跳过2&#xff0c;3两步2.查看系统版本&#xff0c;这里是CentOS 7命令&#xff1a;cat /etc/redhat-release3.根据系统版本找到安…

振奋!中国正式进入5G元年;华为5G俄罗斯签下大单;王坚进入工程院院士第二轮评审...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

java 对象复制 反射_利用Java反射机制实现对象相同字段的复制操作

一、如何实现不同类型对象之间的复制问题&#xff1f;1、为什么会有这个问题&#xff1f;近来在进行一个项目开发的时候&#xff0c;为了隐藏后端数据库表结构、同时也为了配合给前端一个更友好的API接口文档(swagger API文档)&#xff0c;我采用POJO来对应数据表结构&#xff…

企业实战_01_Redis下载/安装/运行/停止

文章目录一、Redis下载&#xff1a;官方&#xff1a;https://redis.io/二、Redis安装&#xff1a;2.1. 上传redis软件服务器2.2. 解压redis2.3. 进入redis目录&#xff0c;进行redis安装2.4. 执行redis安装测试&#xff1a;2.5. 安装异常处理三、redis 启动、停止3.1. 进入src目…

关于5G,你必须知道的事儿……

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | 小枣君来源 | 鲜枣课堂什么是5G 5G&#xff0c;就是5th Generation Mobile Networks&#xff08;第五代移动通信网络&#xff09;&#xff0c;也可以称为5th Generation Wireless Systems&#xff08;第五代无线通信系统&a…

java管理员登录_idea实现管理员登录javaweb

mysql创建db_0106数据库&#xff0c;创建表添加一条数据&#xff0c;id int自增&#xff0c;密码&#xff1a;为MD5加密insert into tb_sys values(null,admin,MD5(123),"系统管理员");项目目录结构com.isoft.db包下db.properties文件mysql.drivercom.mysql.jdbc.Dri…