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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张翼 黑马帝   /  2011-11-11 09:19  /  1389 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String与StringBuffer的区别?

2 个回复

正序浏览
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。
典型地,你可以使用StringBuffers来动态构造字符数据

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
String和StringBuffer
String 是不可以变的字符串.
StringBuffer 是可变的字符串.
对StringBuffer进行操作,是在原来的对象之上进行改变. 而对String进行操作,是创建新的对象。

Java代码
1.public class StringTest {   
2.    public static void stringReplace(String text) {   
3.        text = text.replace('j', 'i');   
4.    }   
5.  
6.    public static void bufferReplace(StringBuffer text) {   
7.        text = text.append("C");   
8.    }   
9.  
10.    public static void main(String args[]) {   
11.        String textString = new String("java");   
12.        StringBuffer textBuffer = new StringBuffer("java");   
13.  
14.        stringReplace(textString);   
15.        bufferReplace(textBuffer);   
16.  
17.        System.out.println(textString + textBuffer);   
18.    }   
19.}  
public class StringTest {
public static void stringReplace(String text) {
  text = text.replace('j', 'i');
}

public static void bufferReplace(StringBuffer text) {
  text = text.append("C");
}

public static void main(String args[]) {
  String textString = new String("java");
  StringBuffer textBuffer = new StringBuffer("java");

  stringReplace(textString);
  bufferReplace(textBuffer);

  System.out.println(textString + textBuffer);
}
}

输出结果
javajavaC
String实例化以后所有的属性都是final的,而StringBuffer确不是,这就是可变与不可变。
这是因为第七行text = text.append ("C"),append方法会改变text中的值,而text与textBuffer指向的地址是相同的。因此会打印javaC
再举个例子:
String a = "a"; //假设a指向地址0x0001
a = "b"; //重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的。
因此String的操作都是改变赋值地址而不是改变值操作。
具体:
String:在String类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个java字符串中的某个单独字符,所以在JDK文档中称String类的对象是不可改变的。然而,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。
StringBuffer:StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用
StringBuffer类的append方法追加字符比String使用 + 操作符添加字符到一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题
这是我看别人的希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

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