- string相关
- String 不可变
- Stringbuffer 可变 线程安全,效率低
- Stringbuild 可变 线程不安全,效率高
- String不可变
//String 类是final修饰的类,一旦创建内容和长度不可以改变(是字符串本身不能改变,不是引用指向的字符串不能改变,不能混淆)
//String值不变验证
//1.结果true,在创建字符串时,会在常量池中查找是否存在相同的字符串,有则返回引用
//没有则创建,所以str str1 地址指向同一个字符串,因此地址值相等,TRUE
String str = "123";
String str1 = "123";
System.out.println(str==str1);//true
//2.通过new创建的string字符串,不是在常量池中,因此相同的字符串内容,并不是同一个地址值
String str2 = new String("123");
System.out.println(str==str2 );//false
String str3 = new String("456");
//再次验证,已经存在通过new的字符串,通过复制方式,获取到的引用不相同
String str4 = "456";
System.out.println(str3==str4);//flase
//3.结果111.说明字符串不可改变,str5给对应的引用复制222,要是可以改变,那么str6结果是222
String str5 = "111";
String str6 = "111";
str5 ="222";
System.out.println(str6); //111
- 三者之间区别
- 底层都是通过char[]数组实现大的
- String 一旦创建不可变,否则开辟新的空间, stringbuffer,stringbuilder 是可变的
- Stringbuffer 实现都是在synchronized中实现同步,线程安全,但是效率低,stringbuilder则没有,线程不安全,效率高
- 频繁使用字符串时,String不优先考虑使用,Stringbuilder在不考虑线程安全时候使用,考虑线程安全使用stringbuffer