欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 中String和StringBuffer与StringBuilder的区别及使用方法

程序员文章站 2024-02-20 20:37:10
java 中string和stringbuffer与stringbuilder的区别及使用方法 1. string 类  string的值是不可变的,这就导致每次对...

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 的区别,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!