黑马程序员技术交流社区

标题: String 、 StringBuffer 和 StringBuilder [打印本页]

作者: 王楚鑫    时间: 2013-6-27 20:31
标题: String 、 StringBuffer 和 StringBuilder
分享一下学习String 、StringBuffer 和 StringBuilder 的区别,希望进度差不多的童鞋多多指教

String是不可变的,StringBuffer是可变的;StringBuffer是线程安全的,
StringBuilder是非线程安全的。 


对于创建成功的字符串对象,它的长度是固定的,内容不能被改变和编译。
虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的
String实例,会在内存中创建新的字符串对象。如果重复的对字符串进行
修改,将极大地增加系统开销。而J2SE5.0新增了可变的字符序列StringBuilder
类,大大提高频繁增加字符串的效率。
  1. import java.lang.*;

  2. public class String_1
  3. {
  4.   public static void main(String para[])
  5.   {
  6.                 String str1,str2,str3,str4;
  7.                 String srcStr= "ABCDEFG";
  8.                 str1 = new String( srcStr );    //产生内容相同的另一份实体       
  9.                 str2 = srcStr.substring(0);                 //产生内容相同的另一份实体                               
  10.                 str3 = srcStr.toString();       //参考同一份实体
  11.                     //str3.toLowerCase();             //看看这种写法是否可以改变str3所引用实例的内容
  12.                 str4 = srcStr;                  //参考同一份实体
  13.                 System.out.println( "srcStr = " + srcStr );
  14.                 System.out.println( "str1 = " + str1 );
  15.                 System.out.println( "str2 = " + str2 );
  16.                 System.out.println( "str3 = " + str3 );
  17.                  //System.out.println( "str3 = " + str3.toLowerCase() );   //注销上一句,看看有什么变化
  18.                 System.out.println( "str4 = " + str4 );
  19.                
  20.                 System.out.println( "比较str1与str2中的内容是否相同" + str1.equals(str2) );
  21.                
  22.                 if(str1 == srcStr)
  23.                         System.out.println( "str1 和 srcStr 参考了同一份实体"  );
  24.                 else
  25.                         System.out.println( "str1 和 srcStr 参考的实体不是同一份"  );

  26.         if(str3 == srcStr)
  27.                         System.out.println( "str3 和 srcStr 参考了同一份实体"  );
  28.                 else
  29.                         System.out.println( "str3 和 srcStr 参考的实体不是同一份"  );                                  
  30.   }
  31. }

复制代码
  1. import java.lang.*;

  2. public class StringBuffer_1
  3. {
  4.   public static void main(String para[])
  5.   {
  6.                 StringBuffer sb1 = new StringBuffer( "1234567" );
  7.                 StringBuffer sb2 = new StringBuffer( sb1.toString() ); //参考新的实体,但有同样的字符串内容
  8.                 System.out.println("sb1 变动前==> sb1 = " + sb1 + "  sb2 = " + sb2);
  9.                 sb1.delete(0,4);
  10.                 System.out.println("sb1 变动后==> sb1 = " + sb1 + "  sb2 = " + sb2);
  11.                
  12.                 StringBuffer sb3 = new StringBuffer("1234567");
  13.                 StringBuffer sb4 = sb3; //参考同一个实体
  14.                 System.out.println("sb3 变动前==> sb3 = " + sb3 + "  sb4 = " + sb4);
  15.                 sb3.delete(0,4);
  16.                 System.out.println("sb3 变动后==> sb3 = " + sb3 + "  sb4 = " + sb4);                                       
  17.   }
  18. }

复制代码

作者: 8047107    时间: 2013-6-27 21:15
顶一下 我也今天看到这里
作者: 王楚鑫    时间: 2013-6-27 21:22
8047107 发表于 2013-6-27 21:15
顶一下 我也今天看到这里

自己练习贴的帖子会不会给加技术分啊???过两天寝室就没有网了、、好纠结这个、、如果自己练习的也可以那就好了
作者: 8047107    时间: 2013-6-27 22:40
王楚鑫 发表于 2013-6-27 21:22
自己练习贴的帖子会不会给加技术分啊???过两天寝室就没有网了、、好纠结这个、、如果自己练习的也可以 ...

看内容 看版主啦~肯定属于酌情给分.你懂得
作者: 神之梦    时间: 2013-6-28 00:30
王楚鑫 发表于 2013-6-27 21:22
自己练习贴的帖子会不会给加技术分啊???过两天寝室就没有网了、、好纠结这个、、如果自己练习的也可以 ...

自己练习的话,最好是有举一反三的,因为大部分练习,老师在视频中都讲过,如果自己对练习有一定见解,或者说可以由此引发到另一个知识什么的,都可以给分。
总的来说,如楼上说的,酌情给分!
其实吧,楼主也不需要急,没网可以用手机,回答别人问题也是很好的获取技术分的方式。
面包会有滴,技术分也是会有滴!不需要着急的。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2