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

 更新时间:2017年08月18日 15:20:44   投稿:lqh  
这篇文章主要介绍了java 中String和StringBuffer与StringBuilder的区别及使用方法的相关资料,在开发过程中经常会用到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 的区别,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • idea如何生成springboot单元测试用例

    idea如何生成springboot单元测试用例

    这篇文章主要介绍了idea生成springboot单元测试用例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java 类与对象超基础讲解

    Java 类与对象超基础讲解

    类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型
    2022-03-03
  • java double保留两位小数问题

    java double保留两位小数问题

    在Java中,可以使用DecimalFormat或String.format来保留double类型数字的两位小数,这两个方法都会进行四舍五入
    2025-03-03
  • spring-session自定义序列化方式

    spring-session自定义序列化方式

    这篇文章主要介绍了spring-session自定义序列化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot项目中实现接口幂等的五种方法

    SpringBoot项目中实现接口幂等的五种方法

    本文介绍了SpringBoot项目中实现接口幂等性的五种主要方案,Token令牌机制、数据库唯一约束、乐观锁、分布式锁和请求摘要,具有一定的参考价值,感兴趣的可以了解一下
    2025-10-10
  • SpringMVC Restful风格与中文乱码问题解决方案介绍

    SpringMVC Restful风格与中文乱码问题解决方案介绍

    Restful就是一个资源定位及资源操作的风格,不是标准也不是协议,只是一种风格,是对http协议的诠释,下面这篇文章主要给大家介绍了关于SpringMVC对Restful风格支持的相关资料,需要的朋友可以参考下
    2022-10-10
  • Spring中的@ExceptionHandler注解统一异常处理详解

    Spring中的@ExceptionHandler注解统一异常处理详解

    这篇文章主要介绍了Spring中的@ExceptionHandler注解统一异常处理详解,当我们使用这个@ExceptionHandler注解时,定义一个异常的处理方法,加上@ExceptionHandler注解,这个方法就会处理类中其他方法抛出的异常,需要的朋友可以参考下
    2024-01-01
  • Swing图形界面实现可动态刷新的验证码

    Swing图形界面实现可动态刷新的验证码

    这篇文章主要为大家详细介绍了Swing图形界面实现可动态刷新的验证码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Spring启动时实现初始化的几种方案

    Spring启动时实现初始化的几种方案

    这篇文章主要介绍了Spring启动时实现初始化的几种方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • RabbitMQ单机版部署安装过程

    RabbitMQ单机版部署安装过程

    RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现,在实现过程中需要注意由于rabbitmq是基于erlang语言开发的,所以必须先安装erlang,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2022-03-03

最新评论