A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陈善奔 于 2013-12-27 11:49 编辑

string和stringbuffer有什么区别?什么时候用哪个?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

4 个回复

倒序浏览
本帖最后由 刘旭升 于 2013-12-26 21:54 编辑

String专门定义不变字符串,而StingBuffer用来定义可变字符串。
两者在性能有很大的区别:String比较适合短的字符串,StingBuffer适合动态增加的字符串
过程比较:
String s ;每次对s进行赋值操作是都将生成一个新的String实例;
StingBuffer sb;sb则不然,它始终是同一个实例。所以在经常动态的改变字符串的值是用StingBuffer效率比较高,java生成一个实例的代价较大。测试反应时间:
  1. package test;
  2. public class string {
  3.         public static void main(String[]args){
  4.                 String s = "";
  5.                 for(int i=0;i<10000;i++)
  6.                 {
  7.                         s=s+(char)i;
  8.                 }
  9.                 System.out.println("s="+s);
  10.         }
  11. }
复制代码
  1. package test;

  2. public class Stringbuffer {
  3.         public static void main(String[]args){
  4.                 StringBuffer s =new StringBuffer("");
  5.                 for(int i=0;i<10000;i++)
  6.                 {        i=(char)i;
  7.                         s.append(i);
  8.                 }
  9.                 System.out.println("s="+s);
  10.         }
  11. }
复制代码





评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上正解,同样受教了
回复 使用道具 举报
Sring的字符串的长度是固定的,定义了就不能够改变的,而StringBuffer的长度是可变的,其初始化的长度为16,但两者之间是可以相互转换的。
回复 使用道具 举报
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。当你知道字符数据要改变的时候你就可以使用StringBuffer
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
看代码,
  • String tempstr = "abcdefghijklmnopqrstuvwxyz";
  • int times = 5000;
  • long lstart1 = System.currentTimeMillis();
  • String str = "";
  • for (int i = 0; i < times; i++) {
  • str += tempstr;
  • }
  • long lend1 = System.currentTimeMillis();
  • long time = (lend1 - lstart1);
  • System.out.println(time);
经测试:打印26个字母重复加用了46秒左右。
而下面的代码是用StringBuffer
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;

  • long lstart2 = System.currentTimeMillis();
  • StringBuffer sb = new StringBuffer();
  • for (int i = 0; i < times; i++) {
  • sb.append(tempstr);
  • }
  • long lend2 = System.currentTimeMillis();
  • long time2 = (lend2 - lstart2);
  • System.out.println(time2);
结果为16秒,可见StringBuffer效率高

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 低调、

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马