一、前言

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的更多相关文章

  1. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  2. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  3. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  4. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  5. angular学习笔记(三十一)-$location(2)

    之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍 ...

  6. angular学习笔记(三十一)-$location(1)

    本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的 ...

  7. angular学习笔记(三十)-指令(2)-restrice,replace,template

    本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...

  8. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  9. Java IO学习笔记三:MMAP与RandomAccessFile

    作者:Grey 原文地址:Java IO学习笔记三:MMAP与RandomAccessFile 关于RandomAccessFile 相较于前面提到的BufferedReader/Writer和Fil ...

  10. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

随机推荐

  1. Mongo Shell CRUD操作

    1.创建并使用test数据库 use test; 此时使用show dbs;命令查看当前存在的数据库是查看不到test数据库的,只有当test中insert数据之后才能查看到test数据库 删除数据库 ...

  2. scrapy 在爬取过程中抓取下载图片

    先说前提,我不推荐在sarapy爬取过程中使用scrapy自带的 ImagesPipeline 进行下载,是在是太耗时间了 最好是保存,在使用其他方法下载 我这个是在 https://blog.csd ...

  3. Go语言:如何解决读取不到相对路径配置文件问题

    背景 项目交叉编译为可执行文件之后,在其他目录执行文件时提示找不到配置文件 2020/03/14 20:44:23 配置文件读取失败 open config.ini: no such file or ...

  4. Simulink仿真入门到精通(十六) Simulink基于模型设计的工业应用概述

    16.1 Simulink用途概述 在基于模型设计广泛应用于汽车电子嵌入式开发的今天,MBD(Model Besed Design)技术也逐步推广到各种嵌入式控制方面.与传统的嵌入式开发相比,BMD以 ...

  5. MySQL记录操作(增删改)

    概览 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据 ...

  6. C++ 线程添加互斥量

    //创建互斥量 HANDLE g_hMutex = NULL; WaitForSingleObject(g_hMutex, INFINITE); ReleaseMutex(g_hMutex);

  7. 建议20:建议通过Function扩展类型

    JavaScript允许为语言的基本数据类型定义方法.通过Object.prototype添加原型方法,该方法可被所有的对象,.这样的方法对函数,数组,字符串,数字,正则表达式和布尔值都适用.例如,通 ...

  8. java-乘法口诀表。(新手)

    //创建的一个包名. package qige; //定义一个类. public class KJ { //公共静态的一个主方法. public static void main(String[] a ...

  9. 大数据软件安装之Flume(日志采集)

    一.安装地址 1) Flume官网地址 http://flume.apache.org/ 2)文档查看地址 http://flume.apache.org/FlumeUserGuide.html 3) ...

  10. eclipse操作快捷键

    Eclipse最全快捷键,熟悉快捷键可以帮助开发事半功倍,节省更多的时间来用于做有意义的事情. Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ ...