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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙宇 黑马帝   /  2011-8-15 20:32  /  2258 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在StringBuffer这个类中有个append方法用来连接拼装字符串的,
但是我直接使用str1+str2的形式去拼装岂不是很方便,为什么还要
去实例化下StringBuffer这个类然后在调用append这个方法去拼装字符串,
岂不是多此一举吗?

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 原创内容

查看全部评分

5 个回复

倒序浏览
黑马网友  发表于 2011-8-15 21:28:14
沙发
很多人说过StringBuffer这个比String效率高,因为后者会把两个字符串相加再扔给第三个字符串。前者是直接相加,但我今天也因为这个问题,特意看了下源码,水平不足,看的稀里糊涂,就不做表示了,既然很多人这么说,就暂且相信吧,楼主有能力看源码的话,看看不就行了吗
回复 使用道具 举报
黑马网友  发表于 2011-8-15 21:42:08
藤椅
String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据
StringBuffer是用来处理字符串变量,它存储的对象是可以扩充和修改的,但是也可以存储字符串常量
String类是用来处理字符串常量,存储的字符串是不可更改的常量。
使用StringBuffer相比String的优势就是对其存储的内容进行修改。我举个例子:
public void onCreate(SQLiteDatabase db)
        {
                StringBuffer tableCreate = new StringBuffer();
                tableCreate.append("create table user ( _id integer primary key autoincrement,")
                                   .append("name text,")
                                   .append("mobilephone text,")
                                   .append("familyphone text,")
                                   .append("officephone text,")
                                   .append("position text,")
                                   .append("company text,")
                                   .append("address text,")
                                   .append("email text,")
                                   .append("othercontact text,")
                                   .append("zipcode text,")
                                   .append("remark text,")
                                   .append("imageid int)");
                db.execSQL(tableCreate.toString());
        }
这是个创建sqlite数据库的方法,在这里为什么使用StringBuffer!一旦数据库需要修改会十分方便。

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 我很赞同

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-15 22:05:01
板凳
明显啊,首先他们在内存当中就是不同的存在方式啊
回复 使用道具 举报
黑马网友  发表于 2011-8-15 22:19:56
报纸
因为调用StringBuffer的append方法永远都是只操作一个对象,而如果用加号连接两个String对象这样程序就会产生3个对象,所以效率比StringBuffer低,为什么会这样?我也看了下源码,因为StringBuffer的每个对象里面用的字符缓冲区都不是final来修饰的,所以缓冲区里可以任意的添加删除数据,而不用创建新的StringBuffer对象;但是String对象里面的字符缓冲区是final修饰的,所以我们只要创建了一个String对象后就不能更改这个对象的缓冲区里面的内容,只能再创建一个新的String对象然后把改变后的内容放到这个对象的缓冲区里,这就是为什么经常说String对象一旦创建就不能改变了的原因。我也只是大概看了一下源码比较它们没细看,我想基本的意思也出来了

评分

参与人数 1技术分 +3 收起 理由
wangfayin + 3 回答的非常好!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-15 22:21:31
地板
[quote] 原帖由 [i]陈希然[/i] 于 2011-08-15 22:19 发表 [url=http://bbs.itheima.com/redirect.jsp?goto=findpost&pid=7776&ptid=1192][img]http://bbs.itheima.com/images/common/back.gif[/img][/url]因为调用StringBuffer的append方法永远都是只操作一个对象,而如果用加号连接两个String对象这样程序就会产生3个对象,所以效率比StringBuffer低,为什么会这样?我也看了下源码,因为StringBuffer的每个对象里面用的字符缓冲区都不是final来修饰的,所以缓冲区里可以任意的添加删除数据,而不用创建新的StringBuffer对象;但是String对象里面的字符缓冲区是final修饰的,所以我们只要创建了一个String对象后就不能更改这个对象的缓冲区里面的内容,只能再创建一个新的String对象然后把改变后的内容放到这个对象的缓冲区里,这就是为什么经常说String对象一旦创建就不能改变了的原因。我也只是大概看了一下源码比较它们没细看,我想基本的意思也出来了 [/quote]原来是一个final.....没注意到,我就觉得奇怪,他们好像差不多的样子= =
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马