问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

String类和StringBuffer类的区别

发布网友 发布时间:2022-03-23 00:08

我来回答

2个回答

懂视网 时间:2022-03-23 04:30

string和buffer的主要区别是:

      String而是一个类,它被用来表示字符序列,其字符本身符合 Unicode 标准,初始化方式有两种。而StringBuffer是一个具有对象引用传递特点的字符串对象,可以调用其方法动态的进行增加、插入、修改和删除操作,且不用像数组那样事先指定大小,从而实现多次插入字符,一次整体取出的效果,因而操作字符串非常灵活方便。

  

热心网友 时间:2022-03-23 01:38

首先,String和StringBuffer主要有2个区别:
(1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringBuffer类对象为可修改对象,可以通过append()方法来修改值
(2)String类对象的性能远不如StringBuffer类。
关于以上具体解释如下:
在java中有3个类来负责字符的操作。
1.Character 是进行单个字符操作的,
2.String 对一串字符进行操作。不可变类。
3.StringBuffer 也是对一串字符进行操作,但是可变类。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
注意:不能通过赋值符号对他进行赋值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中赋值的时候可以通过它的append方法.
sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
看看以下代码:
将26个英文字母重复加了5000次,
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart1 = System.currentTimeMillis();
String str = "";
for (int i = 0; i < times; i++) {
str += tempstr;
}
long lend1 = System.currentTimeMillis();
long time = (lend1 - lstart1);
System.out.println(time);
得到的结果每次不一定,一般为 1563左右。
我们再看看以下代码
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart2 = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < times; i++) {
sb.append(tempstr);
}
long lend2 = System.currentTimeMillis();
long time2 = (lend2 - lstart2);
System.out.println(time2);
得到的结果为 16 有时还是 0
所以结论很明显,StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候,差异更大。不信你试试。
根据上面所说:
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
所以str += "here";可以等同于
StringBuffer sb = new StringBuffer(str);
sb.append("here");
str = sb.toString();
所以上面直接利用"+"来连接String的代码可以基本等同于以下代码
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart2 = System.currentTimeMillis();
String str = "";
for (int i = 0; i < times; i++) {
StringBuffer sb = new StringBuffer(str);
sb.append(tempstr);
str = sb.toString();
}
long lend2 = System.currentTimeMillis();
long time2 = (lend2 - lstart2);
System.out.println(time2);
平均执行时间为1563左右。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
诺基亚5320信号问题 诺基亚5320手机信号满别人打不进来电话是怎么回事? 诺基亚5320接电话每次自动信号断掉为什么? 诺基亚5320手机为什么有时候接听按键接不了电话,而平常玩手机接听键没... 诺基亚5320接不到电话 但是在通话记录里有 5320接不到电话 二手房多久能贷款下来 二手房贷多久能够放款 二手房贷审核通过多久放款 二手房贷款审核后多久能放款? 二手房银行放贷后多久 String 和StringBuffer的区别是什么? 红米手机任何导航怎么总是提醒GPS信号弱 小米手机使用导航的时候总是提示GPS信号弱,自身的定位位置不同步,但是下载东西很快,网速没有问题, 滴滴车主小米手机导航GPS信号弱怎么办? 你好,我的小米手机导航时总是提示jps信号弱,导航跟不上 手机GpS定位信号弱怎么解决 小米10手机GPS信号弱怎么解觉? 小米9GPS定位慢是什么原因? 小米手机为什么gps定位信号弱 小米11pro导航GPS信号弱是怎么回事,怎么解决? 小米手机导航信号弱怎么回事? 小米9pro顶配,高速路上经常提示信号弱? 为什么小米手机总提示gps信号弱 小米手机GPS信号弱 陌陌的快聊怎么创建约会房间 陌陌是干嘛的 陌陌极速版的在线速聊怎么没有了 陌陌怎么邀请好又加入快聊 陌陌是干嘛用的? 陌陌速聊卡怎么设置 String和StringBuffer有什么区别啊? string 和stringbuffer的区别 string和stringbuffer有什么区别 string和stringbuffer类的区别 String 与StringBuffer的区别? 请说详细点,最好用内存分析解释 string和stringbuffer和stringbuilder的区别 String和StringBuffer有什么区别? string和stringbuffer stringbuilder的区别 String、StringBuffer和StringBuilder的区别是什么? String,StringBuffer和StringBuilder的区别 string 和stringbuilder,stringbuffer 的区别 Java中String,StringBuilder和StringBuffer的区别 JAVA中StringBuffer与StringBuilder、String的区别是什么? java中String和StringBuffered有什么区别? “String、StringBuffer和StringBuilder”之间的区别是什么? 手机无网络怎么办 手机没有网络怎么恢复 手机无法上网了怎么办? 手机没有网络怎么办 手机有信号没网络怎么办