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

© 月时微 中级黑马   /  2013-6-19 12:45  /  1623 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Super_Class 于 2013-6-19 19:34 编辑

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

StringBuffers的用法?优点在什么地方?

评分

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

查看全部评分

3 个回复

倒序浏览
String 对一串字符进行操作。不可变类。

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高

评分

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

查看全部评分

回复 使用道具 举报
测试如下:
public class StringAndStringBuffer {
        public static void main(String[] args) {
                String str = "String";
                StringBuffer sf = new StringBuffer("StringBuffer");
                System.out.println("String ...." + add1(str));
                System.out.println("StringBuffer...." +add2(sf));
                //String  覆写了equals()和hashCode()
                System.out.println(new String("abc").equals(new String("abc")));
                //StringBuffer没有覆写equals()和hashCode()
                System.out.println(new StringBuffer("abc").equals(new StringBuffer("abc")));
        }
        public static String add1(String str) {
                for(int i=0; i<10; i++){
                        str = str +" "+ i;
                }
                return str;
        }
        public static StringBuffer add2(StringBuffer sf) {
                for(int i=0; i<10; i++) {
                        sf.append(" " + i);
                }
                return sf;
        }
}
输出结果:
String ....String 0 1 2 3 4 5 6 7 8 9
StringBuffer....StringBuffer 0 1 2 3 4 5 6 7 8 9
true
false
String 被定义为不可变类型,即每次引用一个新的字符串都会开辟一个新的内存空间,如果操作的数据经常变动,每次变动都会申请一个新的内存空间,效率低而且占用系统资源。
StringBuffer 提供字符串修改,每次改动都是在原有的字符上追加,而不会去重新开辟新的内存空间,这样就节省了系统资源,提高了效率。
另外String类覆写了equals()和hashCode()方法,StringBuffer则没有,所以将StringBuffer存入java集合类中时可能会出现错误。

评分

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

查看全部评分

回复 使用道具 举报
http://blog.csdn.net/yirentianran/article/details/2871417
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马