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

java中String和StringBuffer有何区别?(区别对比)

程序员文章站 2022-05-07 14:15:14
...
本篇文章给大家带来的内容是关于 java中String和StringBuffer有何区别?(区别对比),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

前言

  1. String和StringBuffer都是java中关于字符操作的类

  2. 尤其String,经常看到类似这样的赋值代码 String str = "Hello World",看起来就好像int一样以为是java的基本数据类型,其实不是,String是一个类,是一个特殊的类,可以像基本数据类型一样直接赋值。

  3. java中有三个类可以对字符进行操作:

(1)Character 是进行单个字符操作的类。
(2)String 对一串字符进行操作的不可变类。
(3)StringBuffer 也是对一串字符进行操作,但是可变类。

Java中String和StringBuffer类区别

  1. StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值,其实是两个对象。

  2. String是对象,不是原始类型;为不可变对象,一旦被创建,就不能修改其值。

  3. 对于已经存在的String对象的修改,实际上是重新创建一个新的对象,然后把新的值保存进去。

  4. String是final类,不能被继承。

  5. StringBuffer是一个可变对象,当对它修改的时候,不会像String那样重新建立对象,它只能通过构造函数来建立。对象被创立后,会分配内存空间,并初始保存一个null。向StringBuffer中赋值的时候,可以通过它的append方法:obj.append("hello");

  6. 字符串连接操作中StringBuffer的效率比String高。

  7. 如果程序中需要对字符串进行频繁的修改连接操作的话,使用StringBuffer性能会更高。

  8. 在String类中,没有用来改变已有字符串中的某个字符的方法,由于不能改变一个java字符串中的某个单独字符,所以在JDK文档中称String类的对象是不可改变的。

  9. 然而,不可变的字符串具有一个很大的优点:编译器可以把字符串设置为共享的。

  10. StringBuffer是线程安全的,在多线程程序中也可以很方便的进行使用,但是程序执行效率相对来说就要稍微慢一些。

  11. StringBuffer类中的方法偏重于对字符串的变化,例如追加、插入和删除等,这个也是StringBuffer和String类的主要区别。

String与StringBuffer连接字符串比较

  1. String str = new String("Hello World");str += "hello world"; 此字符串连接的处理过程:

    (1)建立一个StringBuffer;
    (2)调用append()方法;
    (3)最后StringBuffer调用toString()给String重新赋值
    (4)这样看来,String的连接操作,比StringBuffer多了一些操作,效率上就会打折扣。
    (5)并且,由于String是不可变对象,每次重新赋值都会重新创建新的对象,那么原来的对象就没用了,就要被垃圾回收,也影响性能。

  2. StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符,比String使用“+”操作符添加字符到一个已经存在的字符串后面有效率的多。

  3. 使用“+”操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无疑是一个非常消耗时间的操作。添加多个字符就意味着要一次又一次的的对字符串重新分配内存。使用StringBuffer就避免了这个问题。

以上就是java中String和StringBuffer有何区别?(区别对比)的详细内容,更多请关注其它相关文章!