zoukankan      html  css  js  c++  java
  • String、StringBuffer、StringBuilder的区别

      在日常开发过程中String字符串估计是被用到最多的变量了,最近看了一些String、StringBuffer和StringBuilder的东西,三者都可以对字符串进行操作,他们究竟有什么区别,以及适用场景如何,就去查了一些资料。

      1)String:字符串常量

      2)StringBuffer:字符串变量

      3)StringBuilder:字符串变量

    一、字符串常量 String

      我们进入到String类中发现在String类前面有Final修饰词,就知道String是不可改变的。也许有人会有一些疑惑,比如下面这写代码:

      从上面这断代码的输出我们看到S的值发生了变化。其实不是这样的,我们都被骗了。

      当第一段代码执行时,首先会去常量池中寻找有没有字符串“abc”,如果没有就会创建一个“abc”,当第二段代码执行时,其实s本身是没有发生改变的,而是创建一个新的对象为abcdef。而s的引用由原来指向“abc”的地址,改变为指向“abcdef”。而原来的“abc”继续存在在常量池中,等一段时间后如果没有被再次引用,就会被GC干掉。我们看下面的代码:

      从上面代码可以看出,String类发生改变时,其实就是新创建了一个对象,所以这样会使内存严重损耗,并且使效率变的特别差。所以当我们要进行字符串修改操作时尽量去使用StringBuffer和StringBuilder。

    二、字符串变量StringBuffer和StringBuilder

      StringBuffer和StringBuilder本质都是可以对字符串进行操作的类,他们的区别主要是StringBuffer是线程安全的,而StringBuilder是非线程安全的。所以在多线程开发时一般要求使用StringBuffer,单线程开发时就要注重效率使用StringBuilder。

    三、三者的使用总结

      String:少量的数据操作,可以使用String

      StringBuffer:多线程开发,注重安全使用StringBuffer

      StringBuilder:单线程开发,注重效率,对安全性要求低,使用StringBuilder

  • 相关阅读:
    sql server 查询当前月份日期列表数据
    redis + cookies 实现持久登入
    JS浏览器兼容问题
    Multicast注册中心
    django模板高级进阶
    django高级视图和URL配置
    django表单操作之django.forms
    django站点管理
    django表单
    django数据库模型
  • 原文地址:https://www.cnblogs.com/wuyx/p/6201946.html
Copyright © 2011-2022 走看看