------- android培训、java培训、期待与您交流! ----------
分享一下学习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);
}
}