Java基础-----StringBuffer和StringBuilder

文章目录

  • 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的效率//Stringlong 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//StringBufferlong 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());//16StringBuffer 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.mzph.cn/news/152959.shtml

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

相关文章

AI集成ChatGPT敲代码神器Copilot

&#x1f4d1;前言 本文主要是AI工具Copilot解读文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&#xff1a;努力…

实现领域驱动设计-应用结构

写在前面&#xff1a; DDD的一大好处便是它并不需要使用特定的架构。我们可以在整个系统中使用多种风格的架构。有些架构包围着领域模型&#xff0c;能够全局性地影响系统&#xff0c;而有些架构则满足了某些特定的需求。我们的目标是选择适合于自己的架构和架构模式。 在选择架…

【HarmonyOS开发】配置开发工具DevEco Studio

1、下载 注意&#xff1a; 1、安装过程中&#xff0c;一定要自定义安装位置&#xff0c;包比较大&#xff0c;包比较大&#xff0c;包比较大&#xff01;&#xff01;&#xff01; 2、可以将该工具添加到右键中&#xff0c;否则&#xff0c;如果你的项目不是HarmonyOS&#xff…

BetterDisplay Pro v2.0.11(显示器颜色校准软件)

BetterDisplay Pro是一款为Mac电脑设计的屏幕亮度调节软件&#xff0c;旨在提高显示器的色彩和亮度表现。它可以根据用户的需求和显示器的特性&#xff0c;自动调整显示器的亮度、色温、对比度等参数&#xff0c;以获得更加真实、舒适的视觉效果。 这款软件拥有智能调节功能&a…

数据结构:枚举

概念 枚举主要用途是&#xff1a;将一组常量组织起来&#xff0c;在这之前表示一组常量通常使用定义常量的方式&#xff1a; 比如下面的例子&#xff1a; public static final int RED 1; public static final int GREEN 2; public static final int BLACK 3; 利用常量…

【深入Scrapy实战】从登录到数据解析构建完整爬虫流程

文章目录 1. 写在前面2. 抓包分析3. Scrapy提交登陆请求4. 列表与详情页面数据解析5. 中间件Middleware配置 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xf…

python django 小程序图书借阅源码

开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…

使用ssh在本地环境(Windows)连接虚拟机以及其中的docker容器

配置虚拟机防火墙 防火墙的一系列操作需要root权限&#xff0c;默认是没有root密码的&#xff0c;所以首先需要设置root密码&#xff1a; sudo passwd root按提示完成root密码设置 切换到root账户 su root启用22端口并重启防火墙 firewall-cmd --permanent --add-port22/tc…

【NI-RIO入门】CompactRIO介绍及环境安装

CompactRIO是什么&#xff1f; CompactRIO系统提供了高处理性能、传感器专用I/O和紧密集成的软件工具&#xff0c;使其成为工业物联网、监测和控制应用的理想之选。实时处理器提供可靠&#xff0c;可预测的行为&#xff0c;而FPGA在需要高速逻辑和精确定时的较小任务上表现出色…

Microsoft Visual Studio 2019下载及安装流程记录

第一周任务&#xff1a; 1.笔记本上安装vc2019的环境 2.再把OpenCV安装上 3.根据网上的教程&#xff0c;试着写几个opencv的程序 一、安装Visual Studio 2019社区版 首先先完成安装vc2019的环境&#xff0c; 因为&#xff1a; Microsoft Visual C是用于C编程的工具集合&am…

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

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

matlab 坡度滤波算法地面分割

目录 一、算法原理1、实现流程2、参考文献二、代码实现三、结果展示四、测试数据一、算法原理 1、实现流程 1、格网示意图 2、计算格网行列数 公式中的特殊符号为向上取整,

el-tree结合el-switch实现状态切换

<template><div><el-col :span"24"><el-card class"tree-card"><div class"sketch_content selectFile"><span class"span_title">组织列表 </span><div style"display: flex; jus…

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

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

壹基金宣传进瑞金河背街社区 安全家园项目防灾减灾深入人心

11月16日下午&#xff0c;瑞金赋能公益、蓝天救援队等联合象湖镇河背街社区开展家庭安全计划社区活动包挑战赛活动暨壹基金安全家园项目防灾减灾宣传社区行活动。活动得到了救助儿童会北京代表处、壹基金、艾特公益、益心益意公益的指导&#xff0c;得到了阿里巴巴公益平台广大…

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

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

【Q2—30min】

1.socket服务端创建过程 socket是应用层与TCP/IP协议族通信的中间软件抽象层&#xff0c;它是一组接口。在设计模式中&#xff0c;Socket其实就是一个门面模式&#xff0c;它把复杂的TCP/IP协议族隐藏在Socket接口后面&#xff0c;对用户来说&#xff0c;一组简单的接口就是全部…

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

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

spider 网页爬虫中的 AWS 实例数据获取问题及解决方案

前言 AAWS实例数据对于自动化任务、监控、日志记录和资源管理非常重要。开发人员和运维人员可以通过AWS提供的API和控制台访问和管理这些数据&#xff0c;以便更好地管理和维护他们在AWS云上运行的实例。然而&#xff0c;在使用 spider 框架进行网页爬取时&#xff0c;我们常常…

.Net6 部署到IIS示例

基于FastEndpoints.Net6 框架部署到IIS 环境下载与安装IIS启用与配置访问网站 环境下载与安装 首先下载环境安装程序&#xff0c;如下图所示,根据系统位数选择x86或者x64进行下载安装,网址&#xff1a;Download .NET 6.0。 IIS启用与配置 启用IIS服务 打开控制面板&#xff…