4.1.3 StringBuilder/StringBuffer

news/2024/12/1 15:31:36/

文章目录

  • 1.特点
  • 2.常见方法
  • 3.练习:测试字符串连接
  • 4.StringBuilder和StringBuffer的区别


1.特点

  1. 封装了char[]数组
  2. 是可变的字符序列
  3. 提供了一组可以对字符内容修改的方法
  4. 常用append()来代替字符串做字符串连接”+”
  5. 内部字符数组默认初始容量是16:super(str.length() + 16);
  6. 如果大于16会尝试将扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。
    intnewCapacity=value.length*2 + 2;
  7. StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全

2.常见方法

append()

3.练习:测试字符串连接

package partThree;
/* 本类用于练习字符串的拼接*/
public class TestString3 {public static void main(String[] args) {//需求,将26个字母拼接10000次String s = "abcdefghijklmnopqrstuvwxyz";//method1(s);method2(s);}//使用方式一进行字符串的拼接private static void method1(String s) {//1.创建一个变量用来保存拼接后的结果String result = "";//5 给程序添加一个计时的功能//5.1在循环开始前记录当前时间作为开始时间long t1 = System.currentTimeMillis();//2.执行循环10000次for (int i = 0; i < 10000; i++) {//每轮循环中拼接字符串result = result + s ;}//5.2在循环结束后记录当前时间作为结束时间long t2 = System.currentTimeMillis();//4.循环结束后打印拼接的效果System.out.println(result);//5.3打印循环消耗的时间System.out.println(t2-t1);System.out.println(t2); //1631609138674  当前时间与协调世界时间(1970年1月1日00点)的毫秒差}//使用方式二进行字符串的拼接private static void method2(String s) {//1.创建工具类对象StringBuffer sb = new StringBuffer();StringBuilder sb2 = new StringBuilder();//5.1在循环执行之前记录当前时间作为开始时间long t1 = System.currentTimeMillis();//2.让循环执行10000次进行拼接for (int i = 0; i < 10000; i++) {//3.在每一轮循环中,使用工具类append()进行拼接/* 我们常用的拼接方法就是StringBulder/StringBuffer中的append()*///sb.append(s);sb2.append(s);}//5.2在循环执行之后记录当前时间作为结束时间long t2 = System.currentTimeMillis();//4.在循环结束后打印拼接效果//System.out.println(sb);System.out.println(sb2);//6 求出拼接花费的时间System.out.println(t2-t1);}
}

StringBuffer比StringBulder效率要更好一点,但是实际使用中,效率更好的值比较有限,所以使用哪个都行,但都是比方法一效率要高很多;

4.StringBuilder和StringBuffer的区别

  1. 在线程安全上 :
    • StringBuffer是旧版本就提供的,线程安全的。@since JDK1.0
    • StringBuilder是jdk1.5后产生,线程不安全的。@since 1.5
  2. 在执行效率上,StringBuilder > StringBuffer > String
  3. 源码体现:本质上都是在调用父类抽象类AbstractStringBuilder来干活,只不过Buffer把代码加了同步关键字,使得程序可以保证线程安全问题。
    在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/22426.html

相关文章

goland 编译器功能介绍

选用 goland 作为 go 语言编辑工具&#xff0c;它集成了很多便捷的功能&#xff0c;辅助我们提高开发效率。我列举一下&#xff0c;感兴趣的可以评论扩展。 Live Templates 动态模板&#xff0c;或者叫自定义动态模板。 比如&#xff0c;我们在代码中输入 consts 然后按 Tab…

c++ summary容器

线性容器vector 对于线性容器&#xff0c;除了front,back&#xff0c;其他的都用的地址进行操作。 初始化 vector<int> abc(10); //初始化了10个默认值为0的元素 vector<int> cde(10&#xff0c;1); //初始化了10个值为1的元素- 通过数组地址初始化 int a…

【手撕面试题】HTML+CSS(高频知识点三)

目录 面试官&#xff1a;清除浮动有哪些方式&#xff1f; 面试官&#xff1a;在网页中应该使用奇数还是偶数的字体&#xff1f; 面试官&#xff1a;position有哪些值&#xff1f;分别是根据什么定位&#xff1f; 面试官&#xff1a;写一个左中右布局占满屏幕&#xff0c;其…

codeforces签到题之div4

&#x1f33c;坏女孩&#xff08;抖音热门版&#xff09; - Laziness惰/西洛卡 - 单曲 - 网易云音乐 标签&#xff1a;模拟&#xff0c;暴力&#xff0c;排序&#xff0c;贪心&#xff0c;双指针&#xff0c;几何&#xff0c;字符串 目录 一&#xff0c;codeforces检查 二…

Go第 19 章 :Redis 的使用

Go第 19 章 &#xff1a;Redis 19.1 Redis 基本介绍 19.1.1 Redis 的安装 19.1.2 Redis 操作的基本原理图 19.2 Redis 的安装和基本使用 19.2.1 Redis 的启动: mac :src/redis-server windows: 19.3 Redis 的操作指令一览 19.3.1 Redis 的基本使用: 说明: Redis 安装好后…

基础IO(下)

基础IO&#xff08;下&#xff09;模拟实现封装C标准库为shell添加重定向功能区分stdout和stderr文件系统磁盘的物理结构磁盘的存储结构磁盘的逻辑结构文件系统的管理理解创建文件/删除文件/查看文件查看文件的更多属性软硬链接软链接硬链接链接指令硬链接数软硬链接的区别删除…

java处理,调用外系统的 WebAPI(https请求)时,相关知识整理

目录 ■整理内容 1.外系统连接时&#xff0c;注意点 2.https证书相关问题---java---证书产生的错误---不被信任的证书 3.https证书相关问题---CURL---通过参数-可以忽略-证书信任问题 4.证书添加---在调用方-添加被调用方(WebAPI https)的证书 5.之前的一个作业&#xff…

「抄底 Android 内存优化 9」 —手撕 LeakCanary 核心原理

核心内容在文章最后面的总结部分 1 自动安装原理 在2.0版本开始&#xff0c;LeakCanary 已经不需要手动初始化了&#xff0c;只需要引入以来即可: // leakCanarydebugImplementation com.squareup.leakcanary:leakcanary-android:2.4那么他是如何进行初始化的呢&#xff1f;答…