在日常开发过程中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

String、StringBuffer、StringBuilder的区别的更多相关文章

  1. String,StringBuffer,StringBuilder的区别

    public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...

  2. [置顶] String StringBuffer StringBuilder的区别剖析

    这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...

  3. String,StringBuffer,StringBuilder的区别及其源码分析

    String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...

  4. Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?

    Question 20171114 String&&StringBuffer&&StringBuilder的区别和联系 创建成功的String对象,其长度是固定的,内容 ...

  5. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  6. 深入理解String, StringBuffer, StringBuilder的区别(基于JDK1.8)

    String.StringBuffer.StringBuilder都是JAVA中常用的字符串操作类,对于他们的区别大家也都能耳熟能详,但底层到底是怎样实现的呢?今天就再深入分析下这三种字符串操作的区别 ...

  7. Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用

    Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类.做为基础知识是必须要理解的,这里做一些总结. A.区别 可以从以下 ...

  8. 在JAVA中,String,Stringbuffer,StringBuilder 的区别

    首先是,String,StringBuffer的区别 两者的主要却别有两方面,第一是线程安全方面,第二是效率方面 线程安全方面: String  不是线程安全的,这意味着在不同线程共享一个String ...

  9. String,StringBuffer,StringBuilder三者区别

    String:每次改变,String都会重新构造,内存指针都会改变 StringBuffer:主要用在全局变量中 StringBuilder:在线程内完成字符拼接,因为线程是不安全的,所以完成后可以丢 ...

  10. 从源码看String,StringBuffer,StringBuilder的区别

    前言 看了一篇文章,大概是讲面试中的java基础的,有如题这么个面试题.我又翻了一些文章看了下,然后去看源码.看一下源码大概能更加了解一些. String String类是final的,表示不可被继承 ...

随机推荐

  1. APP开发和web开发的区别

    1.web开发: 1.浏览器直接访问,协议是http,基本都是PC访问,也就是在家和办公场合,网络比较好. 2.web如果多个服务集成的话使用的是ESB来统一集成 2.APP开发 1.手机app客户端 ...

  2. 详解rsync算法--如何减少同步文件时的网络传输量

    先看下图中的场景,客户端A和B,以及服务器server都保存了同一个文件,最初,A.B和server上的文件内容都是相同的(记为File.1).某一时刻,B修改了文件内容,上传到SERVER上(记为F ...

  3. SQL存储过程解密

    首先要建立一张表和一个存储过程: SQL_DECODE表: CREATE TABLE [dbo].[SQL_DECODE]( ,) NOT NULL, [SQLTEXT] [nvarchar](max ...

  4. EhCache缓存

    EhCache缓存 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache是一种广泛使用的开源Java分布式缓 ...

  5. Maven项目生成 jar直接运行

    pom.xml配置如下:红色部分要注意 在eclipse中maven生成可运行的jar需要指定可运行的主程序 <?xml version="1.0" encoding=&qu ...

  6. String类常用方法

    1.String类的特点,字符串一旦被初始化就不会被改变. 2.String对象定义的两种方式 ①String s = "affdf";这种定义方式是在字符串常量池中创建一个Str ...

  7. 解决UITableView上计时器(Timer)的滑动问题

    要想计时器(Timer)不因UITableView的滑动而停止工作,就得探讨一下RunLoop了. RunLoop本质和它的意思一样是运行着的循环,更确切的说是线程中的循环.它用来接受循环中的事件和安 ...

  8. MySQL For Windows Zip解压版安装

    前言 Windows 下 MySQL 有msi和zip解压安装版两种,而zip版只需解压并做简单配置后就能使用,我个人比较喜欢这种方式. 注意我们这里说的MySQL是指MySQL服务器,有很多初学的同 ...

  9. my sql中join的操作

    SQL标准中的Join的类型:  首先,设置表employees和department的数据为:  1.inner join … on操作类型 内连接inner join是基于连接谓词将两张表(如A和 ...

  10. 通过类名获取spring里的Bean

    import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactor ...