String、StringBuffer、StringBuilder三者是字符串中重要的内容,也是面试过程中经常问到的问题,下面就来总结一下三者的区别。

1.三者都可以存储和操作字符串。

2.String类提供了数值不可改变的字符串,即一旦定义的一个String对象,则不可以对其进行修改,要修改则是新创建了一个String对象。

String str = "a"+"b"+"c";

进行上述操作,则底层操作如下:

String s1 = "a";
String s2 = "b";
String s3 = "c";
String str = s1+s2+s3;

总共创建了四个对象。创建新的对象,则需要消耗更多的资源。

3.StringBuffer和StringBuilder可以对字符串进行修改,如要修改字符串,则是在原串上进行操作,不用进行新对象的创建。

4.StringBuilder:线程非安全

StringBuffer:线程安全

5.由于以上原因,执行效率:StringBuiler>StringBuffer>String

下面进行代码演示,字符a连接10万个a,即进行10万次操作,可看出三者执行效率:

 public class Main {

     public static void main(String[] args) {
String str = "a";
long t1 = System.currentTimeMillis(); //获得的是自1970-1-01 00:00:00.000 到当前时刻的时间距离,单位为毫秒

      for(int i=0;i<100000;i++){
str = str+'a';
}
long t2 = System.currentTimeMillis();
System.out.println("String操作所用时间:"+(t2-t1)); /*---------------------------------------*/ StringBuffer sb = new StringBuffer("a");
long t3 = System.currentTimeMillis();
for(int i=0;i<100000;i++){
sb.append('a');
}
long t4 = System.currentTimeMillis();

        System.out.println("StringBuffer操作所用时间:"+(t4-t3)); //获取StringBuffer操作所用的时间 /*---------------------------------------*/ StringBuilder sd = new StringBuilder("a");
long t5 = System.currentTimeMillis();
for(int i=0;i<100000;i++){
sd.append('a');
}
long t6 = System.currentTimeMillis();
System.out.println("StringBuilder操作所用时间:"+(t6-t5)); //获取StringBuilder操作所用的时间
} }

运行结果如下:

可以看出,StringBuffer和Stringbuilder操作效率比String高得多,StringBuilder操作效率稍微大于StringBuffer。

综上,三者使用场景如下:

(1)如果要操作少量的数据用String,更为简洁方便

(2)单线程操作字符串缓冲区下操作大量数据使用StringBuilder

(3)多线程操作字符串缓冲区下操作大量数据使用StringBuffer

String、StringBuffer、StringBuilder比较的更多相关文章

  1. java中 String StringBuffer StringBuilder的区别

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

  2. String,StringBuffer,StringBuilder的区别

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

  3. 关于String StringBuffer StringBuilder

    0. String对象的创建       1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...

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

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

  5. Java学习笔记--String StringBuffer StringBuilder

    String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...

  6. String StringBuffer StringBuilder (转)

    转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却 ...

  7. 【Java基础】String StringBuffer StringBuilder

    String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...

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

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

  9. final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?

    继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...

  10. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

随机推荐

  1. CSS清除float浮动

    一.浮动产生原因   -   TOP 一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了. 本来两个黑色对象盒子是在 ...

  2. nginx源码分析——http模块

         源码:nginx 1.12.0      一.nginx http模块简介           由于nginx的性能优势,现在已经有越来越多的单位.个人采用nginx或者openresty. ...

  3. Docker改名为Moby了吗?

    背景 在DockerCon17上,Docker发布了两个新的开源项目LinuxKit和Moby.而原来在Github上托管的docker也随着PR #32691的合入正式变为Moby.这究竟是什么情况 ...

  4. 2017/4/25-SAX解析XML文件

    SAX解析XML 1.分析 SAX是按照XML文件的顺序执行,可以说是边扫描,边解析.所以无须将整个文件加载至内存中. 2.优点 1)占用内存少. 2)解析效率高. 3.缺点 1)只能进行读取. 2) ...

  5. Angularjs快速入门(二)

    说说上一节的例子,$scope 我们没有创建这个对象,直接绑定就能获取里面的对象,这种风格遵循了一种叫迪米特法则的设计模式. 然后angular还有一种很强大的功能叫“指令”. 就是你可以吧模板编写成 ...

  6. 读APUE分析散列表的使用

    最近学习APUE读到避免线程死锁的部分,看到部分源码涉及到避免死锁部分,源码使用了散列表来实现对结构(struct)的存储与查找. 本文不讨论代码中的互斥量部分. #include <stdli ...

  7. base 镜像 - 每天5分钟玩转容器技术(10)

    上一节我们介绍了最小的 Docker 镜像,本节讨论 base 镜像. base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建. 其他镜像可以之为基础进行扩展. 所以,能称作 base ...

  8. 关于jstl.jar引用问题及解决方法

    在前文SSM说到因为从MyEclipse换成了Eclipse.有些架包自动缺失. 造成:"org.apache.jasper.JasperException: This absolute u ...

  9. openlayers3应用一:显示百度地图

    在项目中使用百度地图,最直接的方式是使用百度api,但是使用百度api需要申请key,并且某些功能调用有次数限制. 本文讲述在openlayers3中使用百度地图的方法.调用百度地图,也是经过了几番周 ...

  10. ThinkPHP3.2——基础

    1.1.获取ThinkPHP 3.2 获取ThinkPHP的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源. 官网提供了稳定版本的下载:http://thinkp ...