非零基础自学Java (老师:韩顺平) 第13章 常用类 13.6 StringBuilder类

news/2024/4/29 9:36:29/文章来源:https://blog.csdn.net/weixin_44226181/article/details/126926306

非零基础自学Java (老师:韩顺平)

✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】

第13章 常用类

文章目录

      • 非零基础自学Java (老师:韩顺平)
      • 第13章 常用类
        • 13.6 StringBuilder类
          • 13.6.1 基本介绍
          • 13.6.2 StringBuilder常用方法
          • 13.6.3 String、StringBuffer 和 StringBuilder 的比较
          • 13.6.4 String、StringBuffer 和 StringBuilder 的效率测试
          • 13.6.5 String、StringBuffer 和 StringBuilder 的选择

13.6 StringBuilder类

在这里插入图片描述

13.6.1 基本介绍

一个可变的字符序列。

此类提供一个与 StringBuffer兼容的API,但不保证同步(StringBuilder 不是线程安全)。

该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。

如果可能,建议优先采用该类因为在大多数实现中,它比 StringBuffer要快。

在StringBuilder 上的主要操作是append 和 insert方法,可重载这些方法,以接受任意类型的数据。

【举个栗子】

package com.dingjiaxiong.stringbuilder_;/*** ClassName: StringBuilder01* date: 2022/9/4 16:52** @author DingJiaxiong*/public class StringBuilder01 {public static void main(String[] args) {//韩老师解读//老韩解读//1. StringBuilder 继承 AbstractStringBuilder 类//2. 实现了 Serializable ,说明StringBuilder对象是可以串行化(对象可以网络传输,可以保存到文件)//3. StringBuilder 是final类, 不能被继承//4. StringBuilder 对象字符序列仍然是存放在其父类 AbstractStringBuilder的 char[] value;//   因此,字符序列是堆中//5. StringBuilder 的方法,没有做互斥的处理,即没有synchronized 关键字,因此在单线程的情况下使用//   StringBuilderStringBuilder stringBuilder = new StringBuilder();}
}
13.6.2 StringBuilder常用方法

StringBuilder 和StringBuffer均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样

略。

可参考官方文档。

在这里插入图片描述

13.6.3 String、StringBuffer 和 StringBuilder 的比较
  • StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
  • String:不可变字符序列,效率低,但是复用率高。
  • StringBuffer:可变字符序列、效率较高(增删)、线程安全
  • StringBuilder:可变字符序列、效率最高、线程不安全
  • String使用注意说明:
    • string s=“a”;//创建了一个字符串
    • s += “b”;//实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+“b”(也就是"ab”)。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能
    • 结论:如果要对String做大量修改,不要使用String
13.6.4 String、StringBuffer 和 StringBuilder 的效率测试

结论:StringBuilder > StringBuffer > String

【举个栗子】

package com.dingjiaxiong.stringbuilder_;/*** ClassName: StringVsStringBufferVsStringBuilder* date: 2022/9/4 16:57** @author DingJiaxiong*/public class StringVsStringBufferVsStringBuilder {public static void main(String[] args) {long startTime = 0L;long endTime = 0L;StringBuffer buffer = new StringBuffer("");startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {buffer.append(String.valueOf(i)); //StringBuffer拼接80000次}endTime = System.currentTimeMillis();System.out.println("StringBuffer的执行时间为:" + (endTime - startTime));StringBuilder builder = new StringBuilder("");startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {builder.append(String.valueOf(i)); //StringBuilder拼接80000次}endTime = System.currentTimeMillis();System.out.println("StringBuilder的执行时间为:" + (endTime - startTime));String text = "";startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {text = text + i; //StringBuilder拼接80000次}endTime = System.currentTimeMillis();System.out.println("String的执行时间为:" + (endTime - startTime));}
}

运行结果

在这里插入图片描述

13.6.5 String、StringBuffer 和 StringBuilder 的选择
  • 如果字符串存在大量的修改操作,一般使用 StringBuffer 或StringBuilder
  • 如果字符串存在大量的修改操作,并在单线程的情况,使用 StringBuilder
  • 如果字符串存在大量的修改操作,并在多线程的情况,使用 StringBuffer
  • 如果字符串很少修改,被多个对象引用,使用String, 比如配置信息等

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

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

相关文章

DTFT和DFT有何区别?一文为你讲解清楚

很多人在开始学习数字信号处理的时候&#xff0c;对于各种傅里叶变换特别是离散傅里叶变化的概念及作用完全不清楚&#xff0c;IC修真院在网上整理了关于DTFT、DFT的各知识点。下面就来了解一下关于DTFT和DFT的区别吧。 DTFT&#xff0c; DFT 的区别是含义不同、性质不同、用途…

多模态预训练模型指北——LayoutLM

©PaperWeekly 原创 作者 | 杨希单位 | 中国移动云能力中心研究方向 | 自然语言处理引子LayoutLM 从提出到现在已经有 2 年多的时间了&#xff0c;多模态的文档、表单类的识别任务也逐渐走向成熟&#xff0c;在上一期《多模态预训练模型指北——LayoutLM&#xff08;一&am…

virualBox虚拟机系统磁盘fdisk无损扩容

virualBox下系统磁盘扩容前言一、vmdk转vdi通过 VboxManager进行格式转换二、虚拟机设置1.虚拟机设置扩容2.fdisk 无损扩容前言 针对virualBox相较于VMwareWorkstation的磁盘扩容稍微复杂一些。需要明确一点&#xff1a;xxx.vmdk格式的硬盘文件是无法通过virualBox实现扩容的&…

Windows 下端口被占用的原因及解决办法

运行软件或者项目的时候&#xff0c;出现以下问题&#xff1a; panic: blademaster: listen tcp: 0.0.0.0:8080: listen tcp 0.0.0.0:8080: bind: An attempt was made to access a socket in a way forbidden by its access permissions. 第一种情况&#xff1a;确实被占用 1…

微信公众号题库

微信公众号题库 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转…

【STL源码剖析】vector类模拟实现 了解底层-走进底层-掌握底层【超详细的注释和解释】

今天博主继续带来STL源码剖析专栏的第二篇博客了&#xff01; 今天带来vector的模拟实现&#xff01; 其实在很多人学习C过程中&#xff0c;都是只学习一些STL的使用方式&#xff0c;并不了解底层的实现。博主本人认为&#xff0c;这样的学习这样的技术是不深的。如果我们想要熟…

超省钱的线上打印方法我找到了

有不少网友都发现这样一个现象,这就是当自己需要打印一些纸质资料的时候,例如孩子的学习资料、比较重要的一些办公资料等,在路边很难找到一家打印店。有时候好不容易找到一家打印店,却发现打印一张A4的纸质资料,需要一块钱。如果一份纸质资料一共有30页,打印30张A4格式的…

Delphi WebBrowser完成网页自动登录

订制一些WEB数据抓取项目时,会遇到需要先登录网站系统,这时候我们通常会做成由系统自动登录的方式。 分析网页 要完成这项功能,首先需要对项目的网页进行分析,找到关键数据项的ID。如下图中的。1、用户名的ID名称;2、密码对应的ID名称;3、登录按钮对应的ID名称。 完成自动…

Springboot毕设项目公职备考在线学习平台e1h19(java+VUE+Mybatis+Maven+Mysql)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

递归回溯实战+思想

目录 排列&#xff08;提供元素无重复&#xff0c;并且不可以重复选择&#xff09; 排列&#xff08;提供的元素重复了&#xff0c;但是同个位置的元素不能复选&#xff09; 组合&#xff08;提供的元素没有重复&#xff0c;并且可以重复选择相同位置元素&#xff09; 子集…

进程关系~

进程关系一、进程组二、会话三、控制终端四、函数tcgetpgrp、tcsetpgrp和tcgetsid五、作业控制五、孤儿进程组一、进程组 每个进程除了有一进程ID之外&#xff0c;还属于一个进程组&#xff0c;进程组是一个或多个进程的集合。同一进程组中的各进程接收来自同一终端的各 种信号…

Eclipse2022创建SSM项目及问题解决

Eclipse2022创建SSM项目及问题解决 使用Eclipse创建SSM项目的过程中会遇到一些问题&#xff0c;相对于IDEA而言更为繁琐&#xff0c;该篇文章是在使用Eclipse2022&#xff0c;并且设备上已经安装、配置好了Tomcat和Maven的基础之上进行的&#xff0c;目的是为了记录在Eclipse上…

Windows部署JMeter的压力测试

1.安装Windows版本Java 直接下载Java exe格式程序包 官网下载 点击 2.下载JMeter的压缩包 官网下载地址请 点击 或者复制这个URL: https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.5.tgz 在浏览器上&#xff0c;会自动下载 下载下来解压即可。 3.启动JMeter 进入…

Linux内核设计与实现 第十二章 内存管理

因为内核内存需要节省着用&#xff0c;内核处理内存分配错误比较麻烦等&#xff0c;所以内核中获取内存不用户空间获取内存复杂得多。 本章讨论内核是如何管理内存和内核之中获取内存的办法。 12.1页 a) 可以通过 getconf 命令来查看系统的page的大小&#xff1a; [wangyubi…

Linux开发_CentOS7.4服务器安装NFS、NGINX服务器,ffmpeg、Qt环境

1. 环境介绍 环境介绍&#xff1a;采用的是华为云的ECS弹性云服务器–镜像安装的CentOS7.4 64位 -----是服务器版&#xff0c;非桌面版哦。 在CentOS7.4服务器版本的环境下搭建NFS服务器、安装ffmpeg、安装nginx服务器、部署Qt编译环境。 &#xff08;1&#xff09;配置NGIN…

河北稳控科技几种振弦采集仪的主要区别是什么?

河北稳控科技几种振弦采集仪的主要区别是什么?VH系列属于手持系列,多用于振弦传感器现场单次测量使用;VH501TC采集读数仪,设备是专用的多类型传感器手持式读数仪,主测传感类型为单弦式振弦传感器,辅测传感类型为电压、电流传感。采用 32 位 ARM 处理器和大尺寸全彩屏、阵…

无人机群编队分析的定位问题 分析与思考-1(数学建模竞赛2022年B题)

2022年高教社杯全国大学生数学建模竞赛结束了&#xff0c;在此我们对 2022年 B题 进行一些分析与思考。 1. 初步印象 2022年 B题 &#xff08;无人机遂行编队飞行中的纯方位无源定位&#xff09;是一个有趣的题目。 随着无人机技术的快速发展&#xff0c;早已从高科技变做寻常…

【Java】运算符

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程 —— 汪国真 目录 1. 认识运算符 1.1 认识运算符 1.2 运算符的分类 2. 算术运算符 2.1 四则运算符 2.2 复合赋值运算符 2.3 自增 / 自减 运算符 3.关系运算符 4.逻辑运算符 4.1 逻辑与 && 4.2 逻…

分库分表实践

分库分表实践 分库分表概念以及使用场景 分库分表用来解决单表数据量太大&#xff0c;引起的性能问题。使用分库分表后能够根据特定路由键值将数据分布在不同库以及不同表中&#xff0c;解决了单表数据量的性能、运维等问题。一般来讲&#xff0c;单一数据库实例的数据的阈值…

【网络】HTTP协议详解

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…