Java-String、StringBuffer、StringBuilder区别及相关面试题

news2024/10/6 5:58:46

目录

  • 一、引言
  • 二、String类的基本介绍
    • 2.1 创建String对象
    • 2.2 字符串的拼接和连接
    • 2.3 字符串的比较
    • 2.4 字符串的截取和替换
    • 2.5 字符串的查找和匹配
    • 2.6 创建格式化字符串
    • API文档
  • 三、StringBuffer类的基本介绍
    • 3.1 创建StringBuffer对象
    • 3.2 字符串的拼接和连接
    • 3.3 字符串的插入和删除
    • 3.4 字符串的反转
  • 四、StringBuilder类的基本介绍
    • 4.1 创建StringBuilder对象
    • 4.2 字符串的拼接和连接
    • 4.3 字符串的插入和删除
    • 4.4 字符串的反转
  • 五、二维表对比三者区别
    • 类间关系
  • 六、相关面试题
    • 6.1 如何比较两个字符串是否相等?
    • 6.2 如何将字符串转换为大写或小写?
    • 6.3 String类的常用方法有哪些?
    • 6.4 请说出StringBuffer和StringBuilder的适用场景
    • 6.5 为什么String对象是不可变的?
    • 6.6 StringBuilder与StringBuffer的性能比较?

一、引言

在Java编程中,经常会遇到处理字符串的需求。Java提供了多个类来处理字符串,其中最常用的是String、StringBuffer和StringBuilder类。本文将介绍这三个类的基本用法和区别。

二、String类的基本介绍

String是Java中最常用的字符串类,它是不可变的,也就是说一旦被创建,它的值就不能被改变。下面是String类的一些常用方法。

2.1 创建String对象

我们可以使用双引号(“”)或者String的构造函数来创建String对象。例如:

String s1 = "Hello World!";
String s2 = new String("Hello World!");

2.2 字符串的拼接和连接

String类提供了多个方法来进行字符串的拼接和连接。例如:

String s3 = s1 + s2;  // 字符串拼接
String s4 = s1.concat(s2);  // 字符串连接

也可以对字符串常量使用 concat() 方法,如:

"我的名字是 ".concat("Runoob");

2.3 字符串的比较

String类提供了多个方法来进行字符串的比较。例如:

boolean equals = s1.equals(s2);  // 判断两个字符串是否相等
int compareTo = s1.compareTo(s2);  // 比较两个字符串的大小

2.4 字符串的截取和替换

String类提供了截取和替换字符串的方法。例如:

String substring = s1.substring(0, 5);  // 截取字符串
String replace = s1.replace("Hello", "Hi");  // 替换字符串

2.5 字符串的查找和匹配

String类提供了查找和匹配字符串的方法。例如:

int index = s1.indexOf("World");  // 查找字符串的位置
boolean startsWith = s1.startsWith("Hello");  // 判断字符串是否以指定的前缀开始
boolean endsWith = s1.endsWith("World!");  // 判断字符串是否以指定的后缀结束
boolean contains = s1.contains("l");  // 判断字符串是否包含指定的子字符串

2.6 创建格式化字符串

输出格式化数字可以使用 printf() 和 format() 方法。
String 类使用静态方法 format() 返回一个String 对象,并且不仅仅是用于一次打印输出,format() 能用来创建可复用的格式化字符串

String str;
str = String.format("浮点型变量的值为 " +
                   "%f, 整型变量的值为 " +
                   " %d, 字符串变量的值为 " +
                   " %s", floatVar, intVar, stringVar);

API文档

JavaAPI文档-String类

三、StringBuffer类的基本介绍

StringBuffer是可变的字符串类,它可以进行字符串的修改操作。下面是StringBuffer类的一些常用方法。

3.1 创建StringBuffer对象

我们可以使用StringBuffer的构造函数来创建StringBuffer对象。例如:

StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer("Hello World!");

3.2 字符串的拼接和连接

StringBuffer类提供了多个方法来进行字符串的拼接和连接。例如:

StringBuffer sb3 = sb1.append(sb2);  // 字符串拼接
StringBuffer sb4 = sb1.append("Hello").append("World!");  // 字符串连接

3.3 字符串的插入和删除

StringBuffer类提供了插入和删除字符串的方法。例如:

sb1.insert(0, "Hi ");  // 在指定位置插入字符串
sb2.delete(0, 6);  // 删除指定位置的字符串

3.4 字符串的反转

StringBuffer类提供了反转字符串的方法。例如:

sb2.reverse();  // 反转字符串

四、StringBuilder类的基本介绍

StringBuilder是可变的字符串类,它与StringBuffer类类似,但是它没有线程安全的问题,因此在性能要求较高的情况下,推荐使用StringBuilder类。下面是StringBuilder类的一些常用方法。

4.1 创建StringBuilder对象

我们可以使用StringBuilder的构造函数来创建StringBuilder对象。例如:

StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder("Hello World!");

4.2 字符串的拼接和连接

StringBuilder类提供了多个方法来进行字符串的拼接和连接。例如:

StringBuilder sb3 = sb1.append(sb2);  // 字符串拼接
StringBuilder sb4 = sb1.append("Hello").append("World!");  // 字符串连接

4.3 字符串的插入和删除

StringBuilder类提供了插入和删除字符串的方法。例如:


sb1.insert(0, "Hi ");  // 在指定位置插入字符串
sb2.delete(0, 6);  // 删除指定位置的字符串

4.4 字符串的反转

StringBuilder类提供了反转字符串的方法。例如:

sb2.reverse();  // 反转字符串

五、二维表对比三者区别

在这里插入图片描述

类间关系

可以看出StringBuffer类和StringBuilder类都继承于AbstractStringBuilder类。
在这里插入图片描述

六、相关面试题

6.1 如何比较两个字符串是否相等?

可以使用equals()方法或equalsIgnoreCase()方法来比较两个字符串是否相等。

例如:String str1 = “Hello”; String str2 = “World”; str1.equals(str2);

6.2 如何将字符串转换为大写或小写?

可以使用toUpperCase()方法将字符串转换为大写,使用toLowerCase()方法将字符串转换为小写。

例如:String str = “Hello”; str.toUpperCase();

6.3 String类的常用方法有哪些?

常用方法包括length()方法、charAt()方法、indexOf()方法、substring()方法、replace()方法等。

6.4 请说出StringBuffer和StringBuilder的适用场景

应当在多线程环境或需要频繁进行字符串修改操作时使用StringBuffer。

应当在单线程环境下,并且需要频繁进行字符串修改操作时使用StringBuilder。

6.5 为什么String对象是不可变的?

String对象的不可变性主要是为了保证字符串操作的安全性和效率。不可变的字符串可以被共享和复用,而不必担心被修改。

6.6 StringBuilder与StringBuffer的性能比较?

StringBuilder的性能稍优于StringBuffer,因为StringBuilder不需要进行同步操作,所以在单线程场景下性能更好一些。

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

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

相关文章

DDD概念以及微服务划分

目录 DDD简介: DDD与微服务的区别: DDD核心概念: 如何划分微服务边界: DDD简介: DDD 是 Domain-Driven Design 的缩写,称为领域驱动设计。它是为了解决划分业务边界的问题,是一种架构模式,也是一种划分…

Node.js安装教程,2023最新版,保姆级安装教程

Node.js安装教程2023最新版 资源准备 在官网中下载对应版本的node.js 官方连接:https://nodejs.org/en/download Node.js安装配置 下载完成安装包后,打开安装程序 配置好安装路径,无脑下一步至这个页面,这个不需要勾选 就这样…

从《新华三2023十大技术趋势白皮书》,看见前沿技术的“实体”回归

文|智能相对论 作者|李永华 在“新技术革命”的全球预期下,前沿技术创新的步伐不断加速。 下一步,哪些技术趋势将凸显出来,哪些场景将被数字经济深度改变,哪些场景将带来如同科幻世界般的技术应用……这些是从产业界到普罗大众…

BurpSuite安装教程以及环境配置(附安装包)

前言 Burp Suite 是用于攻击web 应用程序的集成平台。它包含了许多Burp工具,这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。 它主要用来做安全性渗透测试,可以实…

通过使用Mybatis插件来实现数据的分页功能

目录 背景一、SpringBoot的后端1、手动拼接SQL来实现2、使用Mybatis插件来实现 二、Vue-cli的前端:请求响应跟踪 三、在使用Mybatis插件进行多表查询(表数大于2)出现的问题1. SQL解决2.后端查询方式改变成嵌套查询 四、 分页总结 背景 分页: 如果一次性的查询全部数据, 响应时…

【MOOC 作业】第5章 链接层

不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) 在某网络中标识为 A 到 E 的 5 个结点以星形与一台交换机连接,考虑在该网络环境中某个正在学习的交换机的运行情况。假定:该交换机表初始为空。B 向 E 发送一个帧,此时交换机将该数…

技术干货——mysql8驱动 jdbc下载,看完你会感谢我

目录 1、这里以mysql-connector-java-8.0.29.jar为例 2、打开MySQL官网,点击DOWNLOADS,如下图 3、进入页面后,滚动到下方,点击 MySQL Community (GPL) Downloads 4、进入后,点击Connector/J 5、选择项 6、这里选…

Python循环练习(刚学过循环的新手或者期末考试复习必看)

这个世界并不是掌握在那些嘲笑者的手中,而恰恰掌握在能够经受得住嘲笑与批评,仍不断往前走的人手中 文章目录 1.输入一个整数n,输出从1到n的数字 2.请输入一个整数n,输出n!的值 3.请输入一个正整数n,计算m1-23-4...(-)n 4.字…

队列的应用——层次遍历、计算机系统

目录 队列在层次遍历中的应用队列在计算机系统中的应用 队列在层次遍历中的应用 在信息处理时,有一类问题需要逐层或逐行处理。这类问题的解决方法往往是在处理当前层或当前行时就对下一层或下一行做预处理,把处理顺序安排好,等到当前层或当…

Mybatis如何使用mapper代理开发

1、创建一个接口,与sql映射文件在同一目录: 2、在resources文件创建同一个目录: 目录之间用/分开 com/itheima/mapper 把映射文件放到mapper里 3、设计sql映射文件的namespace属性,为Mapper接口全限定名:要跟映射文件…

MySQL-SQL全部锁详解(上)

​♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#x…

计算机方向常见期刊的缩写 !!

期刊的缩写 TPAMI: IEEE Trans. Pattern Anal. Mach. Intell. IEEE Transactions on Image Processing(TIP): IEEE Trans. Image Process. IEEE Transactions on Medical Imaging(TMI):IEEE Trans. Med. Imaging IEEE…

【论文笔记】BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers

1.介绍 1.1 核心观点 当时的所有的重建目标都是关于低级图像元素的,低估了高级语义。 【Q】怎么去定义高级和低级语义 1.2 基本流程 VQ-KD编码器首先根据可学习码本将输入图像转换为离散令牌 然后,解码器学习重建由教师模型编码的语义特征&#x…

4C沟通法则16项注意事项 让项目沟通更高效

在我们日常项目沟通过程中,存在很多沟通障碍,如我以为的错误、不敢越级沟通、害怕被拒绝以及没有提前计划沟通活动等。沟通障碍如需求理解错误、开发团队关系紧张、任务分配执行难度大等问题,往往对项目造成不可估量的影响,有可能…

[Web程序设计]实验:会话技术应用

一、实验目的 (1)掌握Cookie和session两种会话跟踪技术和它们的应用和区别。 (2)掌握Cookie和session两种会话的应用和区别。 二、实验内容 (1)请设计一个类,使用Cookie技术实现显示用户上次…

【消费战略方法论】消费本位的战略模型

消费本位战略模型 消费者需求是价值交换的基础。 在经济学中,“买”与“卖”是经济链中的重要两端,一端连接消费需求决定市场规模,一端连接产品供给决定企业利润。即“买”决定“卖”的根本, “卖”是“买”的基础。消费者需求是…

第1讲 Camera KMD ISP子系统课程介绍

更多资源: 资源描述在线课程极客笔记在线课程知识星球星球名称:深入浅出Android Camera 星球ID: 17296815Wechat极客笔记圈 课程内容介绍 目标:课程会帮助大家理解高通camera kmd驱动,包括一些优秀的设计思想。重点讲解cpas, c…

有关回溯问题,总结的细致要点

目录 对于这三类问题的去重我总结的模板,直接用: 组合: 子集: 排列: 总结: 三类回溯问题框架都是 if ...终止for 遍历递归 三类问题都抽象成树 dfs 对于组合和子集问题,需要用到index对…

软件测试的概念与过程----学习软件测试前的思考

软件测试的概念与过程----学习软件测试前的思考 1、软件测试工作是做什么的?2、那我做软件测试拿到一个软件产品我应该从哪里测试,怎末开始工作?3、测试早做好还是晚一些做好?4、软件测试能将软件测试的一点问题都没有嘛&#xff…

蓝牙无线耳机哪个品牌好?盘点前七名无线蓝牙耳机分享

本文将为您详细介绍每款蓝牙耳机的设计特点、音质表现、续航能力和智能功能等关键信息。我们将提供客观、全面的分析,帮助您更好地了解每款产品的优势和适用场景;无论您是追求高保真音质的音乐发烧友,还是需要轻便舒适的耳机进行运动&#xf…