1.介绍
由于String的不可更改特性,为了方便字符串的修改,Java中又提供了StringBuilder和Stringbuffer类,这两个类大部分功能是相同的,以下为常用方法:
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder("hello");
StringBuilder sb2 = sb1;
//追加:即尾插-->字符、字符串、整型数字
sb1.append(' ');//hello
sb1.append("world");//hello world
sb1.append(123);//hello world123
System.out.println(sb1);//hello world123
System.out.println(sb1 == sb2);//true
System.out.println(sb1.charAt(0));//获取0号位上的字符h
System.out.println(sb1.length());//获取字符串的有效长度14
System.out.println(sb1.capacity());//获取底层数组的总大小
sb1.setCharAt(0,'H');//设置任意位置的字符,结果:Hello world123
sb1.insert(0,"Hello world!!!");//Hello world!!!Hello world123
System.out.println(sb1);//Hello world!!!Hello world123
System.out.println(sb1.indexOf("Hello"));//获取Hello第一次出现的位置
System.out.println(sb1.lastIndexOf("hello"));//获取hello最后一次出现的位置
sb1.deleteCharAt(0);//删除首字符
sb1.delete(0,5);//删除[0,5)范围内的字符
String str = sb1.substring(0,5);//截取[0,5)区间中的字符以String的方式返回
System.out.println(str);
sb1.reverse();//字符串逆转
str = sb1.toString();//将StringBuffer以String的方式返回
System.out.println(str);
}
String和StringBuilder最大的区别:String的内容无法修改,而StringBuilder的内容可以修改
tips:String和StringBuilder类不能直接转换,如果想要互相转换,可以采取如下原则:
- String变为StringBuilder:利用StringBuilder的构造方法或append()方法
- StringBuilder变为String:调用toString()方法
2. 面试题
1、String、StringBuffer、StringBuilder的区别
- String的内容不能修改,StringBuffer和StringBuilder的内容可以修改
- StringBuffer和StringBuilder的大部分功能是相似的
- StringBuffer采用同步处理(多线程),属于线程安全操作;StringBuilder未采用同步处理(单线程),属于线程不安全操作
2、以下总共创建了多少个String对象(不考虑常量池之前是否存在)
String str = new String("ab");
String str = new String("a") + new String("b");