首页 >Java >java教程 >java中String和StringBuffer有何区别?(区别对比)

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

不言
不言原创
2018-09-18 17:19:438212浏览

本篇文章给大家带来的内容是关于 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有何区别?(区别对比)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn