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

目录

  • 一、引言
  • 二、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.hqwc.cn/news/633.html

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

相关文章

简单易用多git服务器ssh密钥配置管理

文章目录 前言一、什么是ssh-key二、配置步骤添加ssh-key配置多ssh-key 总结 前言 快速理解如何配置管理多个git服务器的ssh,当我们有多个git帐号时会涉及如何管理不同的remote使用不同的git账户登陆推送 当前repo的origin remote是github,我们在推送时…

pytorch量化库使用(2)

FX Graph Mode量化模式 训练后量化有多种量化类型(仅权重、动态和静态),配置通过qconfig_mapping ( prepare_fx函数的参数)完成。 FXPTQ API 示例: import torch from torch.ao.quantization import (ge…

【MySQL数据库 | 第十九篇】SQL性能分析工具

目录 前言: SQL执行频率: 慢查询日志: profile: profile各个指令: 总结: 前言: 本篇我们将为大家讲解SQL性能的分析工具,而只有熟练的掌握了性能分析的工具,才可以更…

C语言学习(二十九)---内存操作函数

在上一节内容中,我们学习了有关字符串操作的函数,其中分为了限制长度和不限制长度两种方式,虽然上节内容已经在很大程度上有助于程序的实现,但是其有一个致命的缺陷,聪明的你一定已经猜到了吧,对的&#xf…

一面、二面、三面有什么区别?

很多公司面试都分一面、二面、三面甚至更多,大家可能会好奇,为什么要面这么多面,每一面又有啥区别呢? 首先我来回答下为什么要这么多面,最核心的是最后3点: 如果光是一个人面,担心会看走眼&…

Python强类型编程

Python是一门强类型的动态类型语言,具体如下特性: 可以动态构造脚本执行、修改函数、对象类型结构、变量类型但不允许类型不匹配的操作 第一个例子体现动态性:用字符串直接执行代码,动态构建了一个函数并执行,甚至给…

IDEA创建一个Servlet项目(tomcat10)

一、创建maven项目 org.apache.maven.archetypes:maven-archetype-webapp 二、增加Servlet依赖 tomcat9及以前依赖 <!--加入servlet依赖&#xff08;servlet的jar&#xff09;--><dependency><groupId>javax.servlet</groupId><artifactId>ja…

设计模式-抽象工厂模式

抽象工厂模式 1、抽象工厂模式简介2、具体实现 1、抽象工厂模式简介 抽象工厂模式(Abstract Factory Pattern)在工厂模式尚添加了一个创建不同工厂的抽象接口(抽象类或接口实现)&#xff0c;该接口可叫做超级工厂。在使用过程中&#xff0c;我们首先通过抽象接口创建不同的工厂…

NoSQL之 Redis配置与优化

文章目录 一、关系数据库与非关系型数据库关系型数据库&#xff1a;非关系型数据库关系型数据库和非关系型数据库区别&#xff1a;非关系型数据库产生背景 二、Redis简介Redis 具有以下几个优点&#xff1a;使用场景&#xff1a;哪些数据适合放入缓存中Redis为什么这么快 三、R…

4、数据库操作语句:聚合函数

目录 1、定义 2、常用的聚合函数 1&#xff09;Avg/sum&#xff1a;只适用于数值类型的字段&#xff08;或变量&#xff09;。 2&#xff09;Max/min:适用于数值类型、字符串类型、日期时间类型的字段&#xff08;或变量&#xff09; 3&#xff09;Count&#xff1a; ①作…

SpringBoot自定义starter之接口日志输出

文章目录 前言文章主体1 项目全部源码2 项目结构介绍3 starter 的使用3.1 配置文件 application,yml的内容3.2 启动类3.3 控制器类 4 测试结果 结语 前言 本文灵感来源是一道面试题。 要求做一个可以复用的接口日志输出工具&#xff0c;在使用时引入依赖&#xff0c;即可使用。…

OpenCV学习笔记 | ROI区域选择提取 | Python

摘要 ROI区域是指图像中我们感兴趣的特定区域&#xff0c;OpenCV提供了一些函数来选择和提取ROI区域&#xff0c;我们可以使用OpenCV的鼠标事件绑定函数&#xff0c;然后通过鼠标操作在图像上绘制一个矩形框&#xff0c;该矩形框即为ROI区域。本文将介绍代码的实现以及四个主要…