一、前言

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. .Net vs .Net Core,我改如何选择?看这一篇文章就够了

    前言 .Net目前支持构建服务器端应用程序的两种实现主要有两种,.NET Framework和.NET Core.两者共享许多相同的组件,并且您可以在两者之间共享代码.但是,两者之间存在根本差异,在我 ...

  2. 汇编语言-[bx]和loop指令和多个段

    5.1 [BX]和内存单元的描述 要完成描述一个内存单元,需要两种信息: 内存单元的地址: 可以用 [0] 表示一个内存单元, 0 表示单元的偏移地址,段地址默认在 ds 中: 同样也可以用 [bx] ...

  3. java算法--循环队列

    循环队列 我们再用队列得时候不知道发没发现这样一个问题. 这是一个只有三个位置得队列,在进行三次加入(addqueue)操作和三次取出(get)操作之后再进行加入操作时候的样子.明显可以看到,队列已经 ...

  4. 内网渗透之信息收集-Linux系统篇

    linux 系统信息 grep MenTotal /proc/meminfo #查看系统内存总量 cat /etc/issue #查看系统名称 cat /etc/lsb-release #查看系统名称 ...

  5. Vue2.0 【第四季】第1节 实例入门-实例属性

    目录 Vue2.0 [第四季]第1节 实例入门-实例属性 第1节 实例入门-实例属性 一.Vue和Jquery.js一起使用 二.实例调用自定义方法 Vue2.0 [第四季]第1节 实例入门-实例属性 ...

  6. 第3章 C++中的C

    用union节省内存 使用场合:有时一个程序会使用同一个变量处理不同的数据类型,对于这种情况,有两种选择:可以创建一个struct,其中包含所有可能的不同类型的数据:也可以使用联合union,它能把所 ...

  7. [BUG]Uncaught TypeError: Illegal invocation at HTMLDivElement.

    <div id="clickMe" key="1">点我</div> clickMe.onclick = function (event ...

  8. 9. selenium+request方式的cookie绕过

    1. 首先确认POST请求的content-type类型 2. 查看cookies数据 3. 找到对应的headers数据 4. 如果是application/json,传入的json数据需要时jso ...

  9. springcloud基础-eureka(注册中心)案例

    一.新建项目,取名eureka-server pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  10. linux入门系列19--数据库管理系统(DBMS)之MariaDB

    前面讲完Linux下一系列服务的配置和使用之后,本文简单介绍一款数据库管理系统(MySQL的兄弟)MariaDB. 如果你有MySQL或其他数据的使用经验,MariaDB使用起来将非常轻松. 本文讲解 ...