String、StringBuffer和StringBuilder
1、String
String s1 = "hello";
String s2 = "hello";
System.out.println(s1==s2);//true
//比较的是变量中的内存地址,s1和s2保存的都是字符串常量池中的"Hello"的内存地址
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println(s3==s4);//false因为比较的是x和y变量所保存的是内存地址,也就是两个String对象的内存地址, 他们是两个独立的String对象,内存地址当然不一样,所以会输出false
System.out.println(s3.equals(s4));//true因为String类已经重写了equals方法,比较的是String对象中存储的内容
2、StringBuffer
StringBuffer对象代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
String string = "hello";
StringBuffer sf = new StringBuffer(string);
StringBuffer sf1 = new StringBuffer();
sf.append("world");//追加字符,字符串连接
sf1.append("123").append("456").append("789");//追加字符,字符串连接
System.out.println(sf);//helloworld
System.out.println(sf1);//123456789
System.out.println("*****************************");
sf.insert(2,"*");//指定位置插入字符(串)
System.out.println(sf);//he*lloworld
System.out.println("*****************************");
sf.reverse();//字符串反转
System.out.println(sf);//dlrowoll*eh
System.out.println("*****************************");
sf.setCharAt(0,'s');//将第 i 个代码单元设置为 s(可以理解为替换)
System.out.println(sf);//slrowoll*eh
System.out.println("*****************************");
sf.delete(1,3);//删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println(sf);//sowoll*eh
3、StringBuilder
StringBuilder和StringBuffer的对象是可变字符串类,可以对对象进行更改
StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。
运行速度
StringBuilder >StringBuffer > String
总结
String:适用于少量字符串处理的情况
StringBuilder:适用于单线程,要求速度的情况
StringBuffer:适用于保证多线程安全的情况