• 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

  • 相关阅读:
    svn更改默认服务启动目录
    centos systemctl指令
    centos 安装mysql
    centos bad ELF interpreter: No such file or directory
    svn 设置post-commit后 报错svn: Can't convert string from 'UTF-8' to native encoding
    windows 下wamp环境3 安装php7
    windows 下wamp环境2 配置之mysql的安装
    windows 下wamp环境1 配置之apache的安装
    IE8 margin: auto 无法居中
    memcache安装
  • 原文地址:https://www.cnblogs.com/wuyx/p/6201946.html
Copyright © 2020-2023  润新知