java 中String和StringBuffer与StringBuilder的区别及使用方法
java 中string和stringbuffer与stringbuilder的区别及使用方法
1. string 类
string的值是不可变的,这就导致每次对string的操作都会生成新的string对象,不仅效率低下,而且大量浪费有限的内存空间。
string a = "a"; //假设a指向地址0x0001
a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。
因此string的操作都是改变赋值地址而不是改变值操作。
2. stringbuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个stringbuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
stringbuffer buf=new stringbuffer(); //分配长16字节的字符缓冲区 stringbuffer buf=new stringbuffer(512); //分配长512字节的字符缓冲区 stringbuffer buf=new stringbuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。
3.stringbuffer
stringbuffer和stringbuilder类功能基本相似,主要区别在于stringbuffer类的方法是多线程、安全的,而stringbuilder不是线程安全的,相比而言,stringbuilder类会略微快一点。对于经常要改变值的字符串应该使用stringbuffer和stringbuilder类。
1)首先string、stringbuffer、stringbuilder在jdk中都被定义为final类,这意味着他们不可以被继承。
2)string最常见,与stringbuffer相比,string的性能较差,因为对string类型进行改变的时候都会重新生成一个新的string对象,这在字符串拼接操作时很明显,因此内容经常改变的字符串不应该使用string,如果不考虑多线程,则应使用stringbuilder。
3)stringbuffer生成一个对象后,在进行字符串拼接操作时,调用append方法即可,不会产生新的对象,仅对对象本身进行操作,性能比string要高。另外stringbuffer是线程安全的,因此适合在多线程中使用,也正因为如此,速度跟stringbuilder相比会比较慢。
4)stringbuilder的使用方法跟stringbuffer类似,但其是非线程安全的,因此一般常用于单线程,效率比stringbuffer高。
综上所述,选择哪个,需要从内存性能、线程安全、执行效率等多方面考虑,从上面的几条对比中可以得出答案。
以上就是java string和stringbuffer与stringbuilder 的区别,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Java String 和StringBuffer的详解及区别
-
JAVA中StringBuffer与String的区别解析
-
java 中String和StringBuffer与StringBuilder的区别及使用方法
-
Java中API下的String,StringBuffer,StringBuilder的区别及用法
-
浅析Java中String与StringBuffer拼接的区别
-
C#中String和StringBuilder的简介与区别
-
java中String与StringBuilder的区别
-
C#中String和StringBuilder的简介与区别
-
浅析Java中String与StringBuffer拼接的区别
-
java中String与StringBuilder的区别