2016 - 2024

感恩一路有你

java判断stringbuilder不为空 string、stringbuffer和stringbuilder有什么区别?

浏览量:3948 时间:2023-03-25 20:58:28 作者:采采

string、stringbuffer和stringbuilder有什么区别?

java中有三个类负责字符的操作。

是一个单字符操作,

对字符串进行操作。不可变类。

它也对字符串进行操作,但它是可变的。

String:

该对象不是原始类型。

作为不可变对象,一旦创建,其值就不能修改。

对现有字符串对象的任何修改都是创建一个新对象,然后保存新值。

String是最终类,也就是说,它不能被继承。

StringBuff:

是一个可变对象,当它被修改时,不会像String一样重新建立。

它只能由构造函数建立,

StringBuff:罐头公司。;不要通过支付价值符号来向他支付价值。

sb欢迎来到这里!//错误

对象建立后,会在内存中分配内存空间,最初会保存一个null。到StringBuff:

是一个变量对象,与StringBuff:。

字符串字符串新字符串(欢迎使用)

str在这里

其实的处理步骤就是建立一个StringBuffer,让侯调用append(),最后,

然后StringBuffer toSting()

这种情况下,String的连接操作会比StringBuffer多一些额外的操作,当然效率会打折扣。

而且因为String对象是不可变的,每次操作Sting都会重新建立一个新的对象来保存新的值。

这样原来的对象就没用了,会被垃圾回收,也会影响性能。

请看下面的代码:

26个英文字母被添加了5000次,

字符串tempstr abcdefghijklmnopqrstuvwxyz

int乘以5000

long lstart1()

字符串str

for (int i 0 i lt times i ) {

str tempstr

}

长lend1()

长时间(lend1 - lstart1)

(时间)

可惜我的电脑不是超级计算机,每次结果也不一定一样,一般是46687左右。

那是46秒。

让 让我们再看一下下面的代码。

字符串tempstr abcdefghijklmnopqrstuvwxyz

int乘以5000

long lstart2()

StringBuffer sb new StringBuffer()

for (int i 0 i lt times i ) {

(临时)

}

长lend2()

长时间2 (lend2 - lstart2)

(时间2)

结果是16,有时是0。

所以结论很明显,StringBuffer的速度几乎是String的一万倍。当然这个数据不是很准确。因为循环次数是10万,所以差别更大。如果你不喜欢,试试看。;不要相信我。

根据以上所述:

str在这里

其实的处理步骤就是建立一个StringBuffer,让侯调用append(),最后,

然后StringBuffer toSting()

所以这里的str可以等同于

新的字符串缓冲区

(此处)

str()

所以上面直接用来连接String的代码基本可以等价于下面的代码。

字符串tempstr abcd:需要在程序中频繁修改和连接字符串,使用StringBuff

string类和stringbuild类的区别为什么一定要有这两个类?

两个类的工作原理不同。:String类是传统的修改。改变字符串的,它确实可以完成将一个字符串添加到另一个字符串的工作,但是在。NET框架,这个操作真的不划算。因为系统先将两个字符串写入内存,然后删除原来的string对象,再创建一个String对象,读取内存中的数据并赋给它。来来去去花了很多时间。

在系统下使用StringBuilder类时,情况并非如此。文本名称空间。它提供的Append方法可以在已有对象的原位置修改字符串,简单直接。

如果要给一个字符串增加很多操作,StringBuilder类花费的时间和String类根本不是一个数量级。

字符串 对象 String 时间

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。