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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 呆呆呆 中级黑马   /  2013-11-21 22:47  /  1010 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 呆呆呆 于 2013-11-22 11:44 编辑

String 和StringBuffer有什么具体区别啊,搞不太明白!

点评

FFF
经典的问题  发表于 2013-11-21 23:58

评分

参与人数 1技术分 +2 黑马币 +3 收起 理由
FFF + 2 + 3 活动额外+1、新人鼓励!!!

查看全部评分

8 个回复

倒序浏览
就比如int a = 5, 和 5 的区别,一个是变量,一个是常量

点评

FFF
你这个水货~~~!!!  发表于 2013-11-21 23:58
回复 使用道具 举报
这个其实你得意会啊 ,
String类代表字符串,比如“abc” , “c”这都是String 类型的。是常量。
你做个比较
String s = "abc"

int a = 5;

对比下,其实String就相当于int,就是个类型而已,而“abc”相当于5
仅此而已,只不过String类型的可以是“abc“, ”ab“这种,不过你看int
还不是可以 10, 100, 这种吗。只代表一种类型而已,就是一个常量


a = a + 2;

s = s + "c";

再对比下,整数的可以相加得到a = 7;
字符串也可以相加,不过是连起来 s = ”abcc“


再说StringBuffer这个东西,其实这个类就是一个对字符串进行操作的类。
可变长度,可对字符串进行各种操作,赠删改查都可。
比如String s = "abc",你想将b换成d,那么你就得用StringBuilder了
StringBuffer s = new StringBuffer("abc");
s.setCharAt(1,'d');就行了

点评

FFF
感谢你为云七新人解答。很详细,很认真!谢谢!  发表于 2013-11-21 23:59

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 活动技术分额外+1

查看全部评分

回复 使用道具 举报
string的特点
1、String是一种特殊的数据类型,可创建对象。

2、通过String创建的对象分别可存在于字符串池(StringPool)和堆内存中

3、String是一个final的类型,即不可被继承修改,一经生成不可改变。

4、StringPool中的数据可共享,即两个引用变量可指向同一个字符串池中的字符串

5、Java中的任何对象都可写成字符串的形式。
StringBuffer的特点
     1字符串的缓冲区类。是一个类似于数组的容器,里面可以添加内容,但是容器本身并没有改变
     2.在使用的时候,我们可以对容器进行操作,添加、删除、替换、截取数据等,但是并没有改变容器
     也不需要定义新的容器来接受数据有缓冲区。可以节省空间。
StringBuffer和String的区别
                String拼接后以前的字符串就浪费了,而且还耗费了内存空间。
                而StringBuffer使用的是同一个内存空间。
回复 使用道具 举报
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都是String类的对象。字符串是常量;它们的值在创建之后不能改变。所以可以共享它们。StringBuffer是字符串缓存区,它的内容可以被修改,长度也可以改变,StringBuffer类是线程安全的,也就是说多个线程可以安全的访问StringBuffer对象。StringBuilder与StringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的,如果你只是在单线程中使用字符串缓冲区,那么StringBuilder的效率会更高些。值得注意的是StringBuilder是在JDK1.5版本中增加的。以前版本的JDK不能使用该类。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

例如:我们要把1到100的所有数字拼起来,组成一个串。
StringBuffer sbf = new StringBuffer();  
for(int i=0;i<100;i++)
{
sbf.append(i);
}

String str = new String();  
for(int i=0;i<100;i++)
{
str = str + i;
}
红色代码效率很高,因为只创建了一个StringBuffer对象,而下面的代码效率很低,因为创建了101个对象。
回复 使用道具 举报
谢谢你们的回答,搞明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马