String、StringBuilder和StringBuffer的区别和用法
分别使用使用这三种来拼接字符串,对比各自损耗的时间:
经过测试:
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的区别和用法相关推荐
- String, StringBuilder 与StringBuffer的区别与联系
String, StringBuilder 与StringBuffer的区别与联系 @(JAVA)[java] 1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个St ...
- Java计基础---常用类之StringBuilder类--String、StringBuilder和StringBuffer 的区别
常用类之StringBuilder类 StringBulider 类:也是一个字符串类.是一个可变的字符序列,在类中提供了可以改变字符串内容的常用的方法. StringBulider 和 String ...
- Java String,StringBuilder和StringBuffer的区别 StringBuilder StringBuffer String
可以证明,字符串操作是计算机程序设计中最常见的行为. String:不可变的对象,对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原St ...
- String、StringBuilder、StringBuffer的区别
它们之间的区别: 在我们学习String类的时候,也会学习到StringBuilder和StringBuffer,但是他们之间有什么区别呢? 当然他们在具体的代码实现上.内存分配上以及效率上都有着不同 ...
- Java中的String,StringBuilder,StringBuffer的区别
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > ...
- Java 中的 String、StringBuilder、StringBuffer 的区别
目录 一.是什么? 二.区别是? 1. 运行速度(执行速度) 2. 线程安全 三.小结 四.加餐 一.是什么? String 不可变字符序列 String 是字符串常量,其对象一旦创建之后该对象是不可 ...
- StringBuilder与StringBuffer的区别(转)
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- 「每天一道面试题」String和StringBuilder、StringBuffer的区别
Java提供了两种类型的字符串:不可变字符串和可变字符串,分别是String和StringBuffer/StringBuilder,其中String引用的字符串内容不能被改变,而StringBuffe ...
- String和StringBuilder、StringBuffer的区别?
Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串.其中String是只读字符串,也就意味着String引用的字符串内容是 ...
最新文章
- Haar-like矩形特征计算详解
- 使用Git命令时出现fatal: this operation must be run in a work tree提示,该如何解决
- 关于MySQL的各种总结
- 如何画出漂亮的深度学习模型图
- redis日志追加频率
- windows下备份mysql 数据库
- asp判断ajax请求 -asp.net,一个asp注册验证用户名是否重复的Ajax实例
- ShaderLab学习小结(四)简单产生阴影
- 给你揭密一个爆款文案套路,各行各业,谁用谁火
- HTML4+CSS2 模仿一个英雄联盟官网页面
- 爬虫学习---基础操作--抽屉新热榜自动点赞与豆瓣自动统一短评
- 通过Bellman算子理解动态规划
- 复习IO流复制文件时,文件损坏并且文件变得超大(FileInputStream和FileOutputStream)数组复制
- 计算机管理员无法打开软件,win10系统提示管理员已阻止你运行此应用无法打开应用的解决方法...
- 粗糙集约简 程序 matlab,粗糙集属性约简matlab程序
- 安卓apache php mysql_Android下安装apache、mysql、php环境
- ICMP协议之tracert实现
- JAVA学习网址大全
- 验证JDK是否安装成功
- 性能测试:一种计算 TP90、TP95 和 TP99 等水位线的方法
热门文章
- manifest php,Laravel PackageManifest.php: Undefined index: name
- verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...
- java 多态_Java面向对象 —— 多态
- Java程序员需要了解的两种服务器设计模型
- python 怎么判断字符串是否有换行_JAVA中如何判断一个字符串是否换行
- 火力发电厂与变电站设计防火标准_真题—火力发电厂1
- 华硕 x86 android,【华硕X79评测】学不会不收费 几步教你安装Android x86-中关村在线...
- 【学习笔记】JAVA基础——异常处理部分
- 程序的图标无法改变_安卓微信7.0.7内测版发布,细节更新,小程序功能优化
- 苹果切换输入法_日语输入法哪个好