javaSE - StringBuffer 和 StringBuilder(字符串拼接)

news2024/9/27 19:14:53

前言

StringBuffer 、 StringBuilder、 String 是三种数据类型
首先来回顾下String类的特点:

  • 任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已。
  • 通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和StringBuilder类。
  • StringBuffer 和 StringBuilder 大部分功能是相同的,主要介绍 StringBuffer
  • 在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer类中需要更改为append()方法

一、观察String 对象在进行字符串拼接

public static void main(String[] args) {
        String str = "acbcd";
        str = str + "123";
        System.out.println(str);
    }

在这里插入图片描述

所以String类型在进行字符串拼接的时候,会优化成StringBuilder对象,然后在来进行拼接,拼接完之后在调用StringBuilder类的ToString方法,返回一个新的String对象,这时str引用的就是StringBUilder返回的对象

二、观察StringBuilder的使用

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("abcde");
        System.out.println(sb);
    }

在这里插入图片描述

通过StringBuilder的append方法进行拼接

append这个方法的作用就是拼接,是在StringBuilder对象内容的后面拼接,不会产生新的对象,操作的是同一个对象

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("abcde");
        sb.append("123");
        System.out.println(sb);
    }

##

append().append(),还可以连用

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("abcde");
        sb.append("123").append("999");
        System.out.println(sb);
    }

在这里插入图片描述

三、StringBuilder 和 StringBuffer 的区别

String和StringBuffer最大的区别在于:

  • String的内容无法修改,而StringBuffer的内容可以修改。频繁修改字符串的情况考虑使用StingBuffer。

为了更好理解String和StringBuffer,我们来看这两个类的继承结构:
在这里插入图片描述
可以发现两个类都是"CharSequence"接口的子类。这个接口描述的是一系列的字符集。所以字符串是字符集的子
类,如果以后看见CharSequence,最简单的联想就是字符串

StringBuilder 和 StringBuffer 的功能基本上都是差不多的,只是存在一些细微的差别
在这里插入图片描述

都具有append,insert等等的功能
但是我们仔细的看看区别
在这里插入图片描述

字符串反转

StringBuffer也有一些String类没有的方法:

	 public synchronized StringBuffer reverse()
	
	public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("123456");
        stringBuffer.reverse();
        System.out.println(stringBuffer);
    }

在这里插入图片描述

把字符串转变成StringBuilder类型/StringBuffer类型,必须调用对应的构造方法

注意:String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:

  • String变为StringBuffer:利用StringBuffer的构造方法或append()方法
  • StringBuffer变为String:调用toString()方法
public static void main(String[] args) {
        String str = "abcde";
        StringBuilder stringBuilder = new StringBuilder(str);
        System.out.println(stringBuilder);
        System.out.println("--------------");
        StringBuffer stringBuffer = new StringBuffer(str);
        System.out.println(stringBuffer);
    }

在这里插入图片描述

StringBuilder类型/StringBuffer类型 转变成 String类型,调用 toString 方法

      public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder("abcde");
        String str1 = stringBuilder.toString();
        System.out.println(str1);
        System.out.println("---------");

        StringBuffer stringBuffer = new StringBuffer("123456");
        String str2 = stringBuffer.toString();
        System.out.println(str2);
    }

在这里插入图片描述

面试题:请解释String、StringBuffer、StringBuilder的区别:

  • String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
  • StringBuffer与StringBuilder大部分功能是相似的
  • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

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

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

相关文章

Oracle-expdp导出时间变长问题分析

前言: 近期处理了一起expdp导出时间变长的问题,在数据量没有较大增长的情况下,expdp导出时间发生倍数增长,后面分析发现是由于Bug 27634991导致在AMM,ASMM模式下,由于streams pool内存抖动触发了内存收缩,内存收缩的过…

jsp+ssm计算机毕业设计窗户管理系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

[附源码]Nodejs计算机毕业设计基于社区人员管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

【图像去噪】DCT图像去噪【含GUI Matlab源码 614期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y&#xff0…

基于java+springmvc+mybatis+vue+mysql的戒烟网站

项目介绍 大量研究证据表明,戒烟可降低或消除吸烟导致的健康危害。任何人在任何年龄戒烟均可获益,且戒烟越早、持续时间越长,健康获益就越大。随着时代发展人们对健康也越来越重视,更多的人参与到了戒烟的行列中来,本…

[go]分布式系统之snowflake与锁

文章目录分布式id生成器分布式锁负载均衡go语言在网络服务模块有着得天独厚的优势; https://www.cnblogs.com/thepoy/p/14573822.html中详细介绍了涉及到的分布式相关技术。分布式id生成器 Snowflake(雪花算法),由Twitter提出并开…

六问 Kafka 为啥那么牛

1 Kafka 简介 1.1 Kafka 概述 Kafka 是一个分布式的基于发布/订阅模式的消息队列,依靠其强悍的吞吐量,Kafka 主要应用于大数据实时处理领域。在数据采集、传输、存储的过程中发挥着举足轻重的作用。 Apache Kafka 由 Scala 写成,是由Apache软…

转行IT行业学什么比较好?月薪过万要多久?

学什么,比穿什么衣服的问题更难,因为职业的背后,更多的是抉择而不是选择,选错一件衣服可以重来,而选错一个职业所面对的结果,是非常让人痛苦的。 本文是小编对想转行IT行业的你最真挚的建议。 任何事情&a…

QT5.14.2搭建Android开发环境

项目需求:因项目需求需要使用QT开发功能类似的一个跨平台项目,基于Android系统上运行单机软件。 开发环境:Windows 10 QT5.14.2 搭建步骤: 1、安装Java软件,配置环境变量 java软件安装可以选择默认安装位置,我下载…

KNN学习

学习B站 【什么是KNN(K近邻算法)?【知多少】】 https://www.bilibili.com/video/BV1Ma411F7Y4/?share_sourcecopy_web&vd_sourced928ac2eb2c6b562d9488d15f78dfbf4 什么是KNN NN neural network 并不是 KNN 是k-Nearest Neighbors K 近…

[附源码]Node.js计算机毕业设计孤儿院救助平台Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

jsp+ssm计算机毕业设计大学生就业信息检索系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

《Python多人游戏项目实战》第四节 实现房间功能

目录 4.1 确定同一聊天室玩家及房主 4.2 绘制开始或准备按钮 4.3 实现按钮功能 4.4 完整代码下载地址: 在本节,我们会在原有的程序基础上加上房间的功能。当玩家打开游戏窗口后,会自动出现在1号或者2号聊天室。只有当1号聊天室所有玩家准…

【5G MAC】Beam Failure Recovery(BFR)

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

https建立连接加解密原理

https建立连接加解密原理 本文目录https建立连接加解密原理加密并建立连接过程CA的作用服务器获取数字证书过程客户端认证证书过程如何防止中间人攻击解决问题的方法加密并建立连接过程 1.客户端发起HTTPS请求 用户在浏览器里输入一个https网址,然后连接到server的…

EEG- gan:用于脑电图(EEG)大脑信号的生成对抗网络2018

EEG-GAN: Generative adversarial networks for electroencephalograhic (EEG) brain signals Abstract 生成对抗网络(GANs)最近在涉及图像的生成应用中非常成功,并开始应用于时间序列数据。在这里,我们将EEG- gan描述为生成脑电图(EEG)大脑信号的框架…

18-19-20 - 深入特权级转移

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 初识任务状态段(TSS,Task State Segment)1.1 TSS中不同特权级的栈信息1.2 特权级转移时的栈变化1.3 问题一1.4 目标实验(操作系统雏形)1.5 编程实验(特权级转…

QT系列第3节 QT中混合UI设计

QT开发过程中,经常使用Qt designer设计器和代码方式结合来及进行ui设计,本节将介绍这两种方式混合进行ui开发。 目录 1.工程添加图片资源 2.添加菜单 3.添加工具栏 4.简单文本编辑器实现 5. QT Creator常用快捷键 1.工程添加图片资源 (…

javaee之MyBatis框架1

什么是MyBatis框架 先来说一下,什么是框架,框架就是不断升级的半成品软件 框架主要解决的问题:就是应用自身的设计与具体实现解耦,重点放到应用自身的设计上,而不是具体技术实现,具体的技术实现是由底层支…

【JVM知识】插入式注解处理器实现java编程规范检测

【JVM知识】插入式注解处理器实现java编程规范检测一、前言二、Java 规范提案三、注解分类四、java编译器五、插入式注解处理器六、代码规范检测实现(代码示例)七、项目版本统一控制实现(代码示例)一、前言 最近在看**《深入理解…