分享一下学习String 、StringBuffer 和 StringBuilder 的区别,希望进度差不多的童鞋多多指教
String是不可变的,StringBuffer是可变的;StringBuffer是线程安全的,
StringBuilder是非线程安全的。
对于创建成功的字符串对象,它的长度是固定的,内容不能被改变和编译。
虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的
String实例,会在内存中创建新的字符串对象。如果重复的对字符串进行
修改,将极大地增加系统开销。而J2SE5.0新增了可变的字符序列StringBuilder
类,大大提高频繁增加字符串的效率。- import java.lang.*;
- public class String_1
- {
- public static void main(String para[])
- {
- String str1,str2,str3,str4;
- String srcStr= "ABCDEFG";
- str1 = new String( srcStr ); //产生内容相同的另一份实体
- str2 = srcStr.substring(0); //产生内容相同的另一份实体
- str3 = srcStr.toString(); //参考同一份实体
- //str3.toLowerCase(); //看看这种写法是否可以改变str3所引用实例的内容
- str4 = srcStr; //参考同一份实体
- System.out.println( "srcStr = " + srcStr );
- System.out.println( "str1 = " + str1 );
- System.out.println( "str2 = " + str2 );
- System.out.println( "str3 = " + str3 );
- //System.out.println( "str3 = " + str3.toLowerCase() ); //注销上一句,看看有什么变化
- System.out.println( "str4 = " + str4 );
-
- System.out.println( "比较str1与str2中的内容是否相同" + str1.equals(str2) );
-
- if(str1 == srcStr)
- System.out.println( "str1 和 srcStr 参考了同一份实体" );
- else
- System.out.println( "str1 和 srcStr 参考的实体不是同一份" );
- if(str3 == srcStr)
- System.out.println( "str3 和 srcStr 参考了同一份实体" );
- else
- System.out.println( "str3 和 srcStr 参考的实体不是同一份" );
- }
- }
复制代码- import java.lang.*;
- public class StringBuffer_1
- {
- public static void main(String para[])
- {
- StringBuffer sb1 = new StringBuffer( "1234567" );
- StringBuffer sb2 = new StringBuffer( sb1.toString() ); //参考新的实体,但有同样的字符串内容
- System.out.println("sb1 变动前==> sb1 = " + sb1 + " sb2 = " + sb2);
- sb1.delete(0,4);
- System.out.println("sb1 变动后==> sb1 = " + sb1 + " sb2 = " + sb2);
-
- StringBuffer sb3 = new StringBuffer("1234567");
- StringBuffer sb4 = sb3; //参考同一个实体
- System.out.println("sb3 变动前==> sb3 = " + sb3 + " sb4 = " + sb4);
- sb3.delete(0,4);
- System.out.println("sb3 变动后==> sb3 = " + sb3 + " sb4 = " + sb4);
- }
- }
复制代码 |