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