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

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

目录

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不需要进行同步操作,所以在单线程场景下性能更好一些。



相关文章
|
2天前
|
存储 Java
面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
44 23
|
17小时前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
17小时前
|
消息中间件 Java Kafka
Java大文件排序(有手就能学会),kafka面试题2024
Java大文件排序(有手就能学会),kafka面试题2024
|
22小时前
|
NoSQL Dubbo Java
StringBoot编程式事务与声明式事务java工程师面试突击第一季
StringBoot编程式事务与声明式事务java工程师面试突击第一季
|
22小时前
|
消息中间件 前端开发 Java
java面试刷题软件kafka和mq的区别面试
java面试刷题软件kafka和mq的区别面试
|
23小时前
|
消息中间件 架构师 算法
java架构师面试题及答案
java架构师面试题及答案
|
2天前
|
设计模式 API 数据格式
腾讯面试官问我适配器和桥接器的区别?
腾讯面试官问我适配器和桥接器的区别?
7 0
|
2天前
|
消息中间件 安全 前端开发
字节面试:说说Java中的锁机制?
Java 中的锁(Locking)机制主要是为了解决多线程环境下,对共享资源并发访问时的同步和互斥控制,以确保共享资源的安全访问。 锁的作用主要体现在以下几个方面: 1. **互斥访问**:确保在任何时刻,只有一个线程能够访问特定的资源或执行特定的代码段。这防止了多个线程同时修改同一资源导致的数据不一致问题。 2. **内存可见性**:通过锁的获取和释放,可以确保在锁保护的代码块中对共享变量的修改对其他线程可见。这是因为 Java 内存模型(JMM)规定,对锁的释放会把修改过的共享变量从线程的工作内存刷新到主内存中,而获取锁时会从主内存中读取最新的共享变量值。 3. **保证原子性**:锁
17 1
|
2天前
|
安全 Java 编译器
Java中String、StringBuilder和StringBuffer的区别
Java中String、StringBuilder和StringBuffer的区别
10 1
|
2天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
24 0