java判断stringbuilder不为空 string、stringbuffer和stringbuilder有什么区别?
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类根本不是一个数量级。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。