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. php checkbox 从数据库读取和写入

    checkbox将选中的值写入数据库中,在修改的时候如何从数据库中读取并设定Checkbox的状态 1.写入数据库提交后因为你的rol是数组,所以可以使用$_POST获取 PHP code   ? 1 ...

  2. CF #365 703D. Mishka and Interesting sum

    题目描述 D. Mishka and Interesting sum的意思就是给出一个数组,以及若干询问,每次询问某个区间[L, R]之间所有出现过偶数次的数字的异或和. 这个东西乍看很像是经典问题, ...

  3. Hibernate学习--hibernate延迟加载原理(动态代理)

    在正式说hibernate延迟加载时,先说说一个比较奇怪的现象吧:hibernate中,在many-to-one时,如果我们设置了延迟加载,会发现我们在eclipse的调试框中查看one对应对象时,它 ...

  4. bzoj3112 [Zjoi2013]防守战线

    正解:线性规划. 直接套单纯形的板子,因为所约束条件都是>=号,且目标函数为最小值,所以考虑对偶转换,转置一下原矩阵就好了. //It is made by wfj_2048~ #include ...

  5. nginx与apache配合反向代理技术2

    注意,上次我们只是简单的在同一台服务器模拟搭建了一个新的http服务器(启用了8080端口),使用的是apache,从而模拟了多台服务器实现的Nginx反向代理,通过Nginx向上游代理服务器发送请求 ...

  6. 手把手教做单点登录(SSO)系列之一:概述与示例

    本系列将由浅入深的结合示例.源码以及演示视频,手把手的带大家深入最新的单点登录SSO方案选型与架构开发实战.文末附5个满足不同单点登录场景的gif动画演示(如果看不清请在图片上右键用新窗口打开),本系 ...

  7. 《JavaScript面向对象编程指南(第2版)》读书笔记(二)

    <JavaScript面向对象编程指南(第2版)>读书笔记(一) <JavaScript面向对象编程指南(第2版)>读书笔记(二) 目录 一.基本类型 1.1 字符串 1.2 ...

  8. HTML5的article和section的区别

    内容区块是指将HTML页面按逻辑分割后的单位.对于页面网站来说,导航菜单.文章正文.文章的评论等每一个部分都可称为内容区块.      article元素      article元素代表文档.页面或 ...

  9. C#基础知识-数据类型(一)

    俗话说温故而知新,学习一门知识最好的方法就是不断的去咀嚼回味,学习编程更是如此.对于.NET平台中的C#语言而言,有着强大的类库.不断的在更新迭代几乎每隔一年都会更新一个新的模块,.NET Framw ...

  10. 微信小程序之获取当前位置经纬度以及地图显示

    最近刚开始接触微信小程序,在弄懂其结构以及相关接口之后,准备着手实现一个小程序,功能包括--获取用户当前位置的经纬度,在地图上查看位置,通过地图获取不同位置的经纬度. 微信小程序的主体部分包括: 新增 ...