字符串学习笔记(三)---- StringBuilder
一、前言
StringBuilder是jdk1.5后出现的,而StringBuffer是jdk1.0就出现了,并且在功能上俩者并无太大区别。但为什么后来要添加一个StringBuilder呢?这是为了提交效率。在说StringBuilder的效率之前,先了解StringBuffer的作用。
二、String介绍
1、String的缺点
由于String对象是无法改变的,每一次都是new或是从字符串缓冲池中获取;而当我们经常要修改String对象时,就需要生成了一个新的String对象,然后将指针指向新的String对象。所以,我们如果要经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,速度是一定受影响的。
三、StringBuffer介绍
1、StringBuffer的优点
根据上面String的缺点,StringBuffer应运而生。StringBuffer是一种类似于字符串缓冲池的对象,它有效的解决了对String经常修改对系统性能的影响。
2、StringBuffer的缺点
当我们对StringBuffer对象进行增、删、改、查的时候,在多线程上!!!我们必须要确保同步,否则当一个线程在修改StringBuffer对象时,另一个又在查,导致结果不同。所以,我们说StringBuffer对象是同步的、安全的,这是因为它解决了多线程的同步问题。
但是,当在单线程的时候,我们是不需要确保同步!因为它只有一个线程啊。每当我们对StringBuffer对象进行增、删、改、查的时候,是不需要去验证锁,来确保同步的。所以,我们说StringBuffer对象效率低。
四、StringBuilder介绍
1、StringBuilder的优点
自然,StringBuilder是最后出来的,它的出现就是解决StringBuffer在单线程中效率低的问题。此时,StringBuilder在做CURD操作时,是不会去验证锁,来确保同步的。
2、StringBuilder的缺点
由于StringBuilder只是解决StringBuffer在单线程中效率低的问题,它本身没有锁,不能保证同步。所以,StringBuilder在多线程的情况下,是不安全的。
五、String、StringBuffer、StringBuilder适用范围
- String:对字符串非大量的增、删、改的操作;
- StringBuffer:多线程、对字符串进行大量增、删、改的操作;
- StringBuilder:单线程、对字符串进行大量增、删、改的操作;
六、谈对JDK升级的理解
JDK升级一般是针对3个方面:
- 简化书写
- 提高效率
- 提交安全性
所以,如果想看JDK升级的不同,应以这三面为切入点查看。例如,JDK1.5中StringBuilder的出现,就是为了提交StringBuffer在单线程的效率。
字符串学习笔记(三)---- StringBuilder的更多相关文章
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- angular学习笔记(三十一)-$location(2)
之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍 ...
- angular学习笔记(三十一)-$location(1)
本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的 ...
- angular学习笔记(三十)-指令(2)-restrice,replace,template
本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...
- Java IO学习笔记三:MMAP与RandomAccessFile
作者:Grey 原文地址:Java IO学习笔记三:MMAP与RandomAccessFile 关于RandomAccessFile 相较于前面提到的BufferedReader/Writer和Fil ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
随机推荐
- Python入门的三大问题和三大谎言
Python广告,铺天盖地,小白们雾里看花,Python无限美好.作为会20几种语言(BASIC Foxbase/pro VB VC C C++ c# js typescript HTML Ardui ...
- iOS围绕某点缩放或旋转的AnchorPoint的设定
经常会遇到需求,要求手势的缩放或者旋转操作,要求动作变化围绕某一个特定点,或者是两指的中心点,或者是某一个点. 这个问题首先要清晰的知道,iOS各个view的层次关系.特别是,要清除的知道,当前vie ...
- Core + Vue 后台管理基础框架2——认证
1.前言 这块儿当时在IdentityServer4和JWT之间犹豫了一下,后来考虑到现状,出于3个原因,暂时放弃了IdentityServer4选择了JWT: (1)目前这个前端框架更适配JWT: ...
- 2019-2020-3 20174318张致豪《网络对抗技术》Exp2 后门原理与实践
Exp2 后门原理与实践 前期准备 一.实验目标与基础知识 1.1 实践目标 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell,任务计划启动 使用MSF m ...
- Apache Tomcat 文件包含漏洞(CVE-2020-1938)
2月20日,国家信息安全漏洞共享平台(CNVD)发布了Apache Tomcat文件包含漏洞(CNVD-2020-10487/CVE-2020-1938).该漏洞是由于Tomcat AJP协议存在缺陷 ...
- ASP.NETMVC中js非空验证实例
页面代码 @using (Html.BeginForm("Edit", "Home", FormMethod.Post, new { @Id = "f ...
- Simulink仿真入门到精通(九) Simulink的流控制
9.1 Simulink流控制分类 simulink中流控制时通过自带的模块实现的,包括If else.Switch.For和While4个种类. 9.2 While流控制 while 如果条件为真, ...
- C语言程序设计(二) C数据类型
第二章 C数据类型 八进制整数由数字0开头,后跟0~7的数字序列组成. 十六进制整数由数字0加字母x(或X)开头,后跟0~9,a~f(或A~F)的数字序列组成. 整型常量: 默认的int型定义为有符号 ...
- jupyternotebook安装
本篇阅读目录 一.Jupyter notebook环境安装 二.爬虫介绍 回到顶部 一.Jupyter notebook环境安装 1.Anaconda 以及 安装步骤 Anaconda指的是一个开源的 ...
- juery 弹出框
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...