进阶JAVA篇-StringBuilder类与StringBuffer类的常用API(二)

news2024/11/16 1:57:08

目录

API

        1.0 StringBuilder 类概念

        1.1StringBuilder 类中构造器

        1.2 StringBuilder 类中 append()方法

        1.3 StringBuilder 类中 reverse() 方法

        1.4 StringBuilder 类中 length() 方法 

        1.5 StringBuilder 类中 toString() 方法

        1.6 为什么操作字符串的建议使用 StringBuilder 类型 ,而不建议 String 类型?

        1.7 StringBuilder  与 StringBuffer 比较


API

        1.0 StringBuilder 类概念

        StringBuilder 代表可变字符串对象,相当于一个容器,它装的字符串是可以改变的,就是用来操作字符串的。

        对比与一般的 String 类 会更加好操作字符串,因为用String 类型的字符串是不可变的,而 StringBuilder 类型的字符串是可以改变的。

        1.1StringBuilder 类中构造器

        可以通过两种形式来创建 StringBuilder 类型的对象;分别是有参数构造器和无参数构造器。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {
        //根据无参数构造器来创建对象,代表一开始就是空字符串“”
        StringBuilder stringBuilder1 = new StringBuilder();
        System.out.println(stringBuilder1);
        //根据有参数构造器来创建对象,代表一开始就是有自定义的字符串
        String str = "lisi";
        StringBuilder stringBuilder2 = new StringBuilder(str);
        System.out.println(stringBuilder2);
    }
}

        1.2 StringBuilder 类中 append()方法

        添加数据任何数据并返回StringBuilder 类型对象本身。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(11);
        stringBuilder.append(2.2);
        stringBuilder.append('a');
        stringBuilder.append("lisi");
        System.out.println(stringBuilder);

    }

输出结果:

        需要注意的是,每次添加完数据之后,返回来的是对象本身,不会创建新的对象。

        1.3 StringBuilder 类中 reverse() 方法

        将对象的内容反转。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(11);
        stringBuilder.append(2.2);
        stringBuilder.append('a');
        stringBuilder.append("lisi");
        System.out.println(stringBuilder);

        stringBuilder.reverse();
        System.out.println(stringBuilder);
    }

运行结果如下:

 

        同样需要注意的是,反转回来的也是对象本身,不会创建新的对象。

        1.4 StringBuilder 类中 length() 方法 

        返回对象的长度。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(11);
        stringBuilder.append(2.2);
        stringBuilder.append('a');
        stringBuilder.append("lisi");
        System.out.println(stringBuilder);

        stringBuilder.reverse();
        System.out.println(stringBuilder);
        
        //返回字符串个数
        System.out.println(stringBuilder.length());
    }

运行结果如下:

        1.5 StringBuilder 类中 toString() 方法

        将 StringBuilder 类型的对象转变为 String 类型的对象。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(11);
        stringBuilder.append(2.2);
        stringBuilder.append('a');
        stringBuilder.append("lisi");
        System.out.println(stringBuilder);

        stringBuilder.reverse();
        System.out.println(stringBuilder);

        System.out.println(stringBuilder.length());

        String s = stringBuilder.toString();
        //先是 stringBuilder类 去调用静态 toString() 方法
        //然后得到一个 toString 类型的字符串 ,然后用String 类型的变量 s 来接收
        System.out.println(s.toString());
        //然后s 对象去调用已经重写Object 中的toString() 方法
        //最后输出内容:”isila2.211“ 这个字符串是不可以改变的
    }

 运行结果如下:

        1.6 为什么操作字符串的建议使用 StringBuilder 类型 ,而不建议 String 类型?

        最本质的原因就是,StringBuilder 类型的字符串 对字符串操作之后都会返回对象本身,不会创建新的对象,而 String 类型的字符串 每一次对字符串操作之后都会在栈区上 new 一个新的 String 类型的对象,所以操作 String 类型的字符串 的效率不如操作 StringBuilder 类型的字符串。

        举个例子来观察一下:

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {

        String str = "";
        int n = 10000000;
        for (int i = 0; i < n; i++) {
            str += "lisi";
        }
        System.out.println(str);
        
    }
public class StringBuilderAppend {
    public static void main(String[] args) {

        StringBuilder str = new StringBuilder();
        int n = 10000000;
        for (int i = 0; i < n; i++) {
            str.append("lisi");
        }
        System.out.println(str);

    }

这两个代码,都可以在你的电脑去运行一下,看看第一个代码直到运行结束需要多长时间,而第二个代码几乎是眨几下眼的功夫就运行结束了。

        1.7 StringBuilder  与 StringBuffer 比较

        StringBuffer 类中的API 与 StringBuilder 类API 用法是一摸一样的。StringBuffer 类和 StringBuilder 类都是可变字符串类,它们的用途是为了处理字符串的拼接和修改操作。

        StringBuffer 类是线程安全的,可以被多个线程同时访问和修改,但是性能相对较低。它的方法都是同步的,也就是说在多线程环境下,每个方法都会被锁住,保证线程安全。

        StringBuilder 类是线程不安全的,只能被单个线程访问和修改,但是性能相对较高。它的方法没有进行同步,所以在单线程环境下可以获得更好的性能。

        两者的使用方法几乎完全相同,都提供了一系列的方法用于字符串的操作,例如拼接、插入、删除、替换等。区别在于线程安全性和性能。如果在多线程环境下需要进行字符串操作,应该使用 StringBuffer 类;如果在单线程环境下需要进行字符串操作,可以使用 StringBuilder 类来获得更好的性能。


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

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

相关文章

微信小程序--下拉选择框组件封装,可CV直接使用

一、起因 接到的项目需求,查看ui设计图后,由于微信小程序官方设计的下拉选择框不符合需求,而且常用的第三方库也没有封装类似的,所以选择自己自定义组件。在此记录一下,方便日后复用。 ui设计图如下: 微信官方提供的选择框 对比发现并不能实现我们想要的功能。 二、自定义组件…

Talk | ACL‘23 杰出论文,MultiIntruct:通过多模态指令集微调提升VLM的零样本学习

本期为TechBeat人工智能社区第536期线上Talk&#xff01; 北京时间10月11日(周三)20:00&#xff0c;弗吉尼亚理工大学博士生—徐智阳、沈莹的Talk已准时在TechBeat人工智能社区开播&#xff01; 他们与大家分享的主题是: “通过多模态指令集微调提升VLM的零样本学习”&#xff…

uni-app集成使用SQLite

一、打开uni-app中SQLite 二、封装sqlite.js module.exports {dbName: chat, // 数据库名称dbPath: _doc/chat.db, // 数据库地址,推荐以下划线为开头 _doc/xxx.db/*** Description: 创建数据库 或 有该数据库就打开* author: ZXL* createTime: 2023-10-12 09:23:10* Copyr…

python安装geopy出现错误

python&#xff1a; 安装geopy出现错误 错误信息&#xff1a; 解决办法&#xff1a;再试一次 居然成功了&#xff0c;就是说&#xff0c;也不知道为什么

【师兄啊师兄2】公布,李长寿成功渡劫,敖乙叛变,又一美女登场

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 由玄机制作的师兄啊师兄第一季这才完结没有多久&#xff0c;没想到现在第二季就公布了&#xff0c;连海报和预告都出来了&#xff0c;看样子已经做得差不多了。预告看下来&#xff0c;能够明显感觉到官方又进步…

Zero-Copy零拷贝

零拷贝不是0次拷贝&#xff0c;是内核缓存区到应用缓存区0次拷贝 参考文章 Linux 中的零拷贝机制

C++技能系列( 9 ) - 如何实现线程池【详解】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream w…

室内渲染的艺术:室内渲染的灵魂!

在一个寒冷的冬日&#xff0c;当你走进一个温暖舒适的房间&#xff0c;是否曾想过这个房间的渲染效果是如何实现的呢&#xff1f;室内渲染作为一种视觉表现技术&#xff0c;能够将平面的设计转化为真实的三维场景&#xff0c;让人们更好地感受到空间的美感和舒适度。随着科技的…

Endnote 用户自定义Field

当EndNote自带的Field无法满足需求时&#xff0c;EndNote有8个可供用户自定义的Field&#xff08;Custom1-Custom8&#xff09;。我们可自定义其在题录编辑区及文献题录列表区中的名字。以改Custom3至“是否需要深入阅读”Field为例&#xff1a;步骤如下&#xff1a; Edit→Pre…

微信小程序 js中写一个px单位转rpx单位的函数

大家写东西自然还是会比较喜欢用rpx 但是 事实证明 在js中 还是px好用 因为很多单位交互的函数还是只返回px单位的 理论上将 750 rpx 是整个屏幕的宽度 那么 我们可以这样写一个函数 pxToRpx(px) {//获取整个屏幕的宽度单位 pxlet screenWidth wx.getSystemInfoSync().scree…

libncurses.so.5: cannot open shared object file: No such file or directory解决办法

最近在安装mysql的时候碰到这个问题&#xff0c;由此记录一下 mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory解决办法 yum install ncurses-compat-libs

程序员内心独白:注释,爱恨交加,双标难舍

程序员对代码注释可以说是又爱又恨又双标……你是怎么看待程序员不写注释这一事件的呢&#xff1f; 方向一&#xff1a;分享你的观点和故事 对公司好的方面&#xff1a; 从程序员的角度来看&#xff0c;注释对于代码的可读性和可维护性非常重要。注释可以让其他开发者更容易理…

C语言之通讯录的实现篇

目录 test.c 主菜单menu 创建通讯录con 初始化通讯录InitContact 增加个人信息AddContact 展示个人信息ShowContact 删除个人信息DelContact 查找个人信息SearchContact 修改个人信息ModifyContact test.c总代码 contact.h 头文件包含 PeoInfo_个人信息的设置声…

基于PTP的同步时钟同步

基于PTP的同步时钟同步 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; ​本设计采用PTP (Precision Time Protocol)协议&#xff0c;来实现同步时间。PTP是一种精确测量和控制系统的网络协议&#xff0c;用于同步分布式系统中的各种设备和服务器的时间。 首先…

Maxon Cinema 4D 2024:创造无限可能,激发你的创造力

在视觉效果和3D建模领域&#xff0c;Maxon的Cinema 4D一直以其卓越的性能和创新的功能引领着时代潮流。今天&#xff0c;我们很高兴地宣布推出最新版本——Maxon Cinema 4D 2024&#xff08;C4D 2024&#xff09;&#xff0c;它将再次提升行业标准&#xff0c;为设计师提供更强…

SVN提交项目时,出现了这样的提示:“XXX“ is scheduled for addition, but is missing。

原因是&#xff1a;之前用SVN提交过的文件/文件夹&#xff0c;被标记为"addition"状态&#xff0c;等待被加入到仓库。虽然你把这个文件删除了&#xff0c;SVN提交的时候还是会尝试提交这个文件&#xff0c;所以就会提示&#xff1a;"but is missing"。解决…

科技资讯|9月新能源汽车零售74.3万辆,充电桩迎来发展高峰

据中国乘联会发布的初步数据&#xff0c;中国 9 月份乘用车市场零售 202.8 万辆&#xff0c;同比增长 6%&#xff0c;环比增 6%。今年以来&#xff0c;我国乘用车市场累计零售 1,524 万辆&#xff0c;同比增长 2%。 乘联会预计&#xff0c;9 月份新能源车市场零售 74.3 万辆&a…

​电子商务新宠电商独立站成功案例解析|抢占市场巅峰:成功打造日本跨境电商独立站攻略! ​

日本离中国只有690公里&#xff0c;时差仅一个小时。距离和便捷的物流是日本跨境电商最具天然的优势&#xff0c;但除了这种天然优势外&#xff0c;日本还有哪些优势不容忽视&#xff1f;无论是独立站还是乐天、雅虎、日亚&#xff0c;都要遵循一个国家的消费习惯&#xff0c;制…

更新 | 持续开源迅为RK3568驱动指南第十二篇-GPIO子系统

《iTOP-RK3568开发板驱动开发指南》更新&#xff0c;本次更新内容对应的是驱动&#xff08;第十二期_GPIO子系统-全新升级&#xff09;视频&#xff0c;后续资料会不断更新&#xff0c;不断完善&#xff0c;帮助用户快速入门&#xff0c;大大提升研发速度。 文档教程更新至第十…

【翻译】增长秘笈,如何让你的开源项目Star数快速增长

TL;DR &#xff08;前言&#xff09; 本文翻译自 https://star-history.com/blog/playbook-for-more-github-stars&#xff0c;尽可能遵照原文&#xff0c;部分内容做少许改动。 我和我的团队最近推出了一个面向开发者的开源工具。这是我第一次推广一个开源工具。很难找到有意…