Java基础-----StringBuffer和StringBuilder

news2024/12/21 22:31:24

文章目录

  • 1.StringBuffer
    • 1.1 构造方法
    • 1.2 常用方法
  • 2.StringBuilder
  • 3.String、StringBuffer、StringBuilder的区别

1.StringBuffer

  • 内容可变的字符串类,适应StringBuffer来对字符串的内容进行动态操作,不会产生额外的对象。
  • StringBuffer在初始时,默认是有16个字符来作为缓冲区
public StringBuffer(int capacity) {
        super(capacity);
    }
public StringBuffer() {
        super(16);
    }

1.1 构造方法

  • new StringBuffer();
  • new StringBuffer(String);
  • new StringBuffer(int);
  • new StringBuffer(charSequence);
public class TestStringBuffer {
    public static void main(String[] args) {
        StringBuffer stringBuffer=new StringBuffer("abc");
        //append():在当前StringBUffer对象上,追加其他内容
        stringBuffer.append("ccc");
        /**
         * 与String不一样
         * StringBuffer中的所有操作都是在原有的StringBuffer上做的修改
         */
        System.out.println(stringBuffer);//abcccc
        //StringBuffer对象可以无限追加操作
        stringBuffer.append("XXX").append(12);
        System.out.println(stringBuffer);//abccccXXX12
        //将StringBuffer对象转为String类型
        String x=stringBuffer.toString();//这里拿到的是String对象
        System.out.println(x);//abccccXXX12
    }
}

比较String和StringBuffer的效率

public class TestStringBuffer {
    public static void main(String[] args) {        
        //10万个字符串累加效果    对比String和StringBUffer的效率
        
        //String
        long t1= System.currentTimeMillis();
        String str=new String("abc");   
        for (int i = 0; i < 100000; i++) {
            str+="abc";
        }
        long t2=System.currentTimeMillis();
        long t=t2-t1;
        System.out.println(t);//2687   2539   2542

        //StringBuffer
        long t1= System.currentTimeMillis();
        StringBuffer buffer =new StringBuffer("abc");        
        for (int i = 0; i < 100000; i++) {
            buffer.append("xxx");
        }
        long t2=System.currentTimeMillis();
        long t=t2-t1;
        System.out.println(t);//4
    }
}

1.2 常用方法

append()在当前StringBUffer对象上,追加其他内容
capacity()返回当前StringBuffer的容量
length()返回长度
setCharAt(int,char)将给定索引位置的字符设置为第二个参数给定的值
reverse()将StringBuffer内容反转
delete(int,int)删除在StringBuffer中从指定索引开始(包含)到结束(不包含)的字符串
toString()将StringBuffer转成字符串
insert(int,Object)在指定索引位置,插入给定值
replace(int,int,String)将指定的字符串替换到起始(包含)位置和结束(不包含)位置中
deleteCharAt(int)删除指定索引位置的字符
public class TestStringBuffer_1 {
    public static void main(String[] args) {
       StringBuffer buffer=new StringBuffer();
        System.out.println(buffer.capacity());//16

        StringBuffer buffer=new StringBuffer("abc");
        System.out.println(buffer.capacity());//19
    }
}

上述程序结果不同的原因:
在这里插入图片描述

案例:判断从键盘接收一行文字,是否是回文 例如:abcba

Scanner scanner=new Scanner(System.in);
System.out.println("请输入一行文字:");
String str=scanner.next();
StringBuffer buffer=new StringBuffer(str);
buffer.reverse();
//boolean b=str.equals(buffer);//false  因为在调用String的equals方法时,要求必须是String类型才可以,str是String类型,而buffer是StringBuffer类型。

//解决办法一:把StringBuffer调用toString方法转成String类型
boolean b=str.equals(buffer.toString());

//解决办法二:调用contentEquals方法
boolean b=str.contentEquals(buffer);
System.out.println(b);
StringBuffer buffer=new StringBuffer("abcdef");
//delete(int,int):删除在StringBuffer中从指定索引开始(包含)到结束(不包含)的字符串
buffer.delete(0,3);
System.out.println(buffer);//def
//insert(int,Object):在指定索引位置,插入给定值
buffer.insert(0,"XXX");
System.out.println(buffer);//XXXdef
StringBuffer buffer=new StringBuffer("13566667777");
//replace(int,int,String):将指定的字符串替换到起始(包含)位置和结束(不包含)位置中
buffer.replace(3,7,"****");
System.out.println(buffer);//135****7777
//deleteCharAt(int):删除指定索引位置的字符
buffer.deleteCharAt(0);
System.out.println(buffer);//35****7777

2.StringBuilder

  • 提供了和StringBuffer相同的API

  • StringBuffer的方法,都有synchronized修饰,是线程安全的

  • StringBuild的方法,没有synchronized修饰,非线程安全的。如果是单线程操作字符串相关处理,StringBuilder的效率最高。

3.String、StringBuffer、StringBuilder的区别

  • String和StringBuffer的区别: 一个是常量,一个是变量。String是一个final修饰的终结类,不能产生子类,是使用final的byte数组来存储值,所以一旦创建不能改变。如果疆场对字符串进行修改、删除或者插入操作,建议使用StringBuffer效率更高

  • StringBuffer和StringBuilder的区别: 一个是有线程安全的,一个是非线程安全的

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习笔记 - Ocr识别中的CTC算法原理概述

一、文字识别 在文本检测步骤中,分割出了文本区域。现在需要识别这些片段中存在哪些文本。 机器学习笔记 - Ocr识别中的文本检测EAST网络概述-CSDN博客文章浏览阅读300次。在 EAST 网络的这个分支中,它合并了 VGG16 网络不同层的特征输出。现在,该层之后的特征大小将等于 p…

【计算机网络笔记】路由算法之链路状态路由算法

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

Redis高级特性和应用(发布 订阅、Stream)

目录 发布和订阅 操作命令 发布消息 订阅消息 查询订阅情况 查看活跃的频道 查看频道订阅数 使用场景和缺点 Redis Stream Stream总述 常用操作命令 生产端 消费端 单消费者 消费组 创建消费组 消息消费 在Redis中实现消息队列 基于pub/sub 基于Stream Re…

18章总结—Swing程序设计

例题1 package admi; import java.awt.*; import javax.swing.*; public class JFreamTest { public static void main(String[] args) { JFrame jfnew JFrame(); jf.setTitle("创建一个JFrame窗体"); Container containerjf.getC…

C++二分算法:找到最接近目标值的函数值

本文涉及的基础知识点 二分查找算法合集 题目 Winston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target &#xff0c;他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。 请你返回 |func(arr, l, r) - target| 的最小值。 请注意&#xff0c…

《崩坏:星穹铁道》1.5仙舟罗浮-绥园全宝箱攻略

大家好&#xff0c;我是闲游盒小盒子&#xff0c;本篇来说下崩铁1.5版本仙舟罗浮-绥园的全宝箱攻略&#xff0c;共有19个宝箱加1个扑满&#xff1b;做完间章可获取前14个普通宝箱加2个精英怪宝箱&#xff0c;以及1个扑满&#xff1b;完成《狐斋志异》全任务可获得另外3个宝箱。…

Wireshark抓包:理解TCP三次握手和四次挥手过程

TCP是一种面向连接、端到端可靠的协议&#xff0c;它被设计用于在互联网上传输数据和确保成功传递数据和消息。本节来介绍一下TCP中的三次握手和四次挥手。 文章目录 1 TCP头部格式2 wireshark抓包分析2.1 SEQ和ACK2.2 三次握手2.3 四次挥手 3 程序 1 TCP头部格式 TCP头部占据…

【教3妹学编辑-mysql】详解数据库三大范式

什么是范式 简单地理解就是&#xff1a;数据库设计时遵循的规范 三大范式 数据库三大范式包含&#xff1a;1、第一范式(1NF)&#xff1b;2、第二范式(2NF)&#xff1b;3、第三范式(3NF)。其中&#xff0c;第一范式(1NF)的要求是属性不可分割&#xff0c;第二范式(2NF)的要求是…

【Linux】【开发】使用sed命令遇到的乱码问题

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Linux技术&…

队列的实现和OJ练习

目录 概念 队列的实现 利用结构体存放队列结构 为什么单链表不使用这种方法&#xff1f; 初始化队列 小提示&#xff1a; 队尾入队列 队头出队列 获取队头元素 获取队尾元素 获取队列中有效元素个数 检测队列是否为空 销毁队列 最终代码 循环队列 队列的OJ题 …

读像火箭科学家一样思考笔记04_第一性原理(下)

1. 来自无形规则的阻力 1.1. 无形规则 1.1.1. 僵化成规则的不必要习惯和行为 1.1.2. 不像有形的书面规则 1.1.2.1. 书面规则出现在标准操作流程中&#xff0c;可以修改或删除 1.1.3. 成文的规则可能会抗拒变革&#xff0c;但无形规则却更加顽固 1.1.4. 我们为强加在自己身…

Elasticsearch 和 LangChain 合作开发可用于生产的 RAG 模板

作者&#xff1a;Aditya Tripathi 在过去的几个月里&#xff0c;我们一直与 LangChain 团队密切合作&#xff0c;他们在推出 LangServe 和 LangChain 模板方面取得了进展&#xff01; LangChain Templates 是一组用于构建生产质量的生成式 AI 应用程序的参考架构。 你可以在此处…

从0开始学习JavaScript--JavaScript使用Promise

JavaScript中的异步编程一直是开发中的重要话题。传统的回调函数带来了回调地狱和代码可读性的问题。为了解决这些问题&#xff0c;ES6引入了Promise&#xff0c;一种更现代、更灵活的异步编程解决方案。本文将深入探讨JavaScript中如何使用Promise&#xff0c;通过丰富的示例代…

试用无线调试器PowerDebugger小记

试用无线调试器PowerDebugger小记 文章目录 试用无线调试器PowerDebugger小记引言准备软硬件环境PowerDebugger 无线调试器EVB-YTM32B1LE0-Q64 开发板 开始调试小结参考文献 引言 多年前调试智能车时&#xff0c;抱着电脑连着小车在跑道上一边跑一边看数据的经历&#xff0c;让…

vue-awesome-swiper 引入css样式文件报错等问题

引入css样式文件这个错是我最开始就有的错误&#xff0c;因为在安装vue-awesome-swiper 就会默认安装swiper。我指定了vue-awesome-swiper的版本&#xff0c;但是没指定swiper的版本&#xff0c;默认安装版本为8.0.7。 所以在引入css文件的时候报错&#xff0c;在node_modules…

车载毫米波雷达行业发展4——技术

4.1 车载毫米波雷达技术原理 毫米波雷达系统可实现距离测量、速度测量和角度测量三大基本功能。车载毫米波雷达 常用调频连续波(FMCW)雷达&#xff0c;其工作频率随时间做周期性线性变化&#xff0c;能测速和测距&#xff0c;适合做 近距离测量&#xff0c;有较高的测量精度。…

Docker发布简单springboot项目

Docker发布简单springboot项目 在IDEA工具中直接编写Dockerfile文件 FROM java:8COPY *.jar /app.jarCMD ["--server.prot 8080"]EXPOSE 8080ENTRYPOINT ["java", "-jar", "/app.jar"]将项目打包成对应的jar包&#xff0c;将Dockerf…

基于龙格-库塔算法优化概率神经网络PNN的分类预测 - 附代码

基于龙格-库塔算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于龙格-库塔算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于龙格-库塔优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对P…

cpu飙高问题,案例分析(一)

一、复习知识点&#xff1a; CPU性能指标&#xff1a; load average&#xff1a;负载&#xff0c;linux查看的时候&#xff0c;通常显示如下&#xff1a; load average后面有三段数字&#xff1a;代表了系统1分钟&#xff0c;5分钟&#xff0c;15分钟平均负载。 形象的类别可…

CommonModule.dll动态链接库(DLL)文件丢失的处理方法

方法一、手动下载修复 (1)从网站下载commonmodule.dll文件到您的电脑上。 (2)将commonmodule.dll文件复制到" X:\Windows\system32 " (X代表您系统所在目录盘符&#xff0c;如&#xff1a;C:\Windows\system32)目录下。 (3)在开始菜单中找到"运行(R)" 或…