分别使用使用这三种来拼接字符串,对比各自损耗的时间:
经过测试:

package com.test;public class Main{public static void main(String[] args){testString();testStringBuffer();testStringBuilder();}private static void testStringBuilder() {long begin = System.currentTimeMillis();StringBuilder str = new StringBuilder("");for (int i = 0; i < 30000; i++) {str.append(i);}long end = System.currentTimeMillis();long time = end - begin;System.out.println("-------------StringBuilder性能快--------------");System.out.println(time);}private static void testStringBuffer() {long begin = System.currentTimeMillis();StringBuffer str = new StringBuffer("");for (int i = 0; i < 30000; i++) {str.append(i);}long end = System.currentTimeMillis();long time = end - begin;System.out.println("------------StringBuffer安全的---------------");System.out.println(time);}//String 做做字符串拼接的时候,性能极低,每次拼接的时候对象改变public static void testString(){long begin = System.currentTimeMillis();String str = "";
/*      for (int i = 0; i < 30000; i++) {str += i;}*/for(Integer i =0; i< 30000; i++){str += i.toString();}long end = System.currentTimeMillis();long time = end - begin;System.out.println("-----------String----------------");System.out.println(time);}
}

结论:以后拼接字符串,统统使用StringBuffer/StringBuilder,不要使用String。

String和StringBuilder以及StringBuffer的区别:
StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的。

唯一的区别(建议使用StringBuilder):
StringBuffer:StringBuffer中的方法都使用synchronized修饰符,表示同步的在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低。
StringBuilder:StringBuilder没有使用synchronized修饰符,不安全,但性能高。
StringBuilder sb = new StringBuilder ()等价于…new StringBuilder(16)(API可见..) 使用StringBUilder无参数的构造器,在底层创建一个长度为16的char数组:
char[] value = new char[16];
此时该数组只能存储16字符,如果超过了,得自动扩容:
自动扩容(创建长度更大得数组,再把之前得数组拷贝到新数组)
此时性能极低,一般得,我们事先知道大概需要存储多少字符,在构造器中就应该设置。
//创建长度为80得字符数组
new StringBuilder(80);

package com.test;public class M1001{public static void main(String[] args) {StringBuilder sb1 = new StringBuilder(16);//链式编程sb1.append("A").append("B");System.out.println(sb1);//之所以可以用链式编程因为返回的是this指针,例如oxx()new M1001().ooxx().ooxx().ooxx();System.out.println("----------删除最后一个字符-----------------");String str ="abcdefg";StringBuffer newString = new StringBuffer(str).deleteCharAt(str.length()-1);System.out.println(newString);System.out.println("--------字符串反转方法-------------------");System.out.println(new StringBuffer("asdf").reverse());}public M1001 ooxx(){return this;}
}

String、StringBuilder和StringBuffer的区别和用法相关推荐

  1. String, StringBuilder 与StringBuffer的区别与联系

    String, StringBuilder 与StringBuffer的区别与联系 @(JAVA)[java] 1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个St ...

  2. Java计基础---常用类之StringBuilder类--String、StringBuilder和StringBuffer 的区别

    常用类之StringBuilder类 StringBulider 类:也是一个字符串类.是一个可变的字符序列,在类中提供了可以改变字符串内容的常用的方法. StringBulider 和 String ...

  3. Java String,StringBuilder和StringBuffer的区别 StringBuilder StringBuffer String

    可以证明,字符串操作是计算机程序设计中最常见的行为. String:不可变的对象,对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原St ...

  4. String、StringBuilder、StringBuffer的区别

    它们之间的区别: 在我们学习String类的时候,也会学习到StringBuilder和StringBuffer,但是他们之间有什么区别呢? 当然他们在具体的代码实现上.内存分配上以及效率上都有着不同 ...

  5. Java中的String,StringBuilder,StringBuffer的区别

    这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > ...

  6. Java 中的 String、StringBuilder、StringBuffer 的区别

    目录 一.是什么? 二.区别是? 1. 运行速度(执行速度) 2. 线程安全 三.小结 四.加餐 一.是什么? String 不可变字符序列 String 是字符串常量,其对象一旦创建之后该对象是不可 ...

  7. StringBuilder与StringBuffer的区别(转)

    相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...

  8. 「每天一道面试题」String和StringBuilder、StringBuffer的区别

    Java提供了两种类型的字符串:不可变字符串和可变字符串,分别是String和StringBuffer/StringBuilder,其中String引用的字符串内容不能被改变,而StringBuffe ...

  9. String和StringBuilder、StringBuffer的区别?

    Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串.其中String是只读字符串,也就意味着String引用的字符串内容是 ...

最新文章

  1. Haar-like矩形特征计算详解
  2. 使用Git命令时出现fatal: this operation must be run in a work tree提示,该如何解决
  3. 关于MySQL的各种总结
  4. 如何画出漂亮的深度学习模型图
  5. redis日志追加频率
  6. windows下备份mysql 数据库
  7. asp判断ajax请求 -asp.net,一个asp注册验证用户名是否重复的Ajax实例
  8. ShaderLab学习小结(四)简单产生阴影
  9. 给你揭密一个爆款文案套路,各行各业,谁用谁火
  10. HTML4+CSS2 模仿一个英雄联盟官网页面
  11. 爬虫学习---基础操作--抽屉新热榜自动点赞与豆瓣自动统一短评
  12. 通过Bellman算子理解动态规划
  13. 复习IO流复制文件时,文件损坏并且文件变得超大(FileInputStream和FileOutputStream)数组复制
  14. 计算机管理员无法打开软件,win10系统提示管理员已阻止你运行此应用无法打开应用的解决方法...
  15. 粗糙集约简 程序 matlab,粗糙集属性约简matlab程序
  16. 安卓apache php mysql_Android下安装apache、mysql、php环境
  17. ICMP协议之tracert实现
  18. JAVA学习网址大全
  19. 验证JDK是否安装成功
  20. 性能测试:一种计算 TP90、TP95 和 TP99 等水位线的方法

热门文章

  1. manifest php,Laravel PackageManifest.php: Undefined index: name
  2. verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...
  3. java 多态_Java面向对象 —— 多态
  4. Java程序员需要了解的两种服务器设计模型
  5. python 怎么判断字符串是否有换行_JAVA中如何判断一个字符串是否换行
  6. 火力发电厂与变电站设计防火标准_真题—火力发电厂1
  7. 华硕 x86 android,【华硕X79评测】学不会不收费 几步教你安装Android x86-中关村在线...
  8. 【学习笔记】JAVA基础——异常处理部分
  9. 程序的图标无法改变_安卓微信7.0.7内测版发布,细节更新,小程序功能优化
  10. 苹果切换输入法_日语输入法哪个好