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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 年轻的棒棒 中级黑马   /  2013-5-20 13:24  /  1946 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 年轻的棒棒 于 2013-5-21 10:20 编辑

String 和StringBuffer的区别是什么啊,感觉用的时候没啥区别啊?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

6 个回复

倒序浏览
String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。
你对比他们的方法就知道了

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
String str1 = "hello";//一个字符串就是一个String类的匿名对象,匿名对象就是已经开辟了堆内存空间的并可以直接使用的对象。这对象内存中的内容是不可以改变的,当以后修改字符串时(str1="hello world";),会重新建立对象保存内容.你想啊,以后修改一次内容就重新分配个内存保存内容,这样效率会高?
StringBuilder:一个可变的字符字符序列的。主要有append\insert方法。当修改时,直接在以前内存中修改,不需要创建新的对象.这样效率是不是比String高?
但是是不是就用StringBuilder代替String就好了呢?不是StringBuilder效率高,但线程不安全。这里就是多线程了。。。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 石贤芝 于 2013-5-20 18:02 编辑

兄弟,StringBuffer 是为了 String 而生的。

字符串某些操作如果单独进行会比较慢,为了提高对字符串操作的效率,StringBuffer (即字符串缓冲区,在内存中) 就诞生了,Buffer中添加了一些字符串操作的常用方法。

就像某些 IO 流对象对数据的操作效率也不高,sun公司就设计了一些 IO 流对象的Buffer。
回复 使用道具 举报
恩恩,了解了,谢谢啊!
回复 使用道具 举报
我也来参加参加;
话说String和StringBuilder这两个类理解也不难;
String类创建的对象是不可变的,我们经常用的字符串连接“+”等其他内容,其实是将所涉及到的两个对象先转换为StringBuilder,在进行连接操作,然后把操作的结果转换为新的String对象,即s1=s2+s3;总之它是不可变的。用它的时候,请注意它的两种创建方式,即String s="abc";和String s=new String("abc");这两种方式是有区别的,论坛里有很多这方面的帖子,你可以搜下。
StringBuilder类,既然他涉及到字符串改变操作,那么他当然是创建可变的字符串罗
回复 使用道具 举报
xiewen 中级黑马 2013-5-21 00:29:58
7#
StringBuffer和StringBuilder类都表示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer
                            黑马云青年为您解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马