测试String, StringBuilder,StringBuffer 的数据,我居然发现这些了~~
懒的搞什么开头了,直接撸代码吧
想了想还是给大家看看学姐照片吧,保持眼睛的明亮,代码敲多了,伤眼
1: 作StringBuilder与String的拼接比较
@Test
public void testString () {String s="";long begin = System.currentTimeMillis();for(int i=0; i<500000; i++){String s1 = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" ;String s2 = "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" ;String s3 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ;String s4 = s1+s2+s3;}long over = System.currentTimeMillis();System.out.println("操作"+s.getClass().getName()+"类型使用的时间为:"+(over-begin)+"毫秒");
}
@Test
public void testStringBuilder () {StringBuilder sb = new StringBuilder();long begin = System.currentTimeMillis();for(int i=0; i<500000; i++){String s1 = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" ;String s2 = "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" ;String s3 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ;String s4= new StringBuilder(s1).append(s2).append(s3).toString();}long over = System.currentTimeMillis();System.out.println("操作"+sb.getClass().getName()+"类型使用的时间为:"+(over-begin)+"毫秒");
}
操作java.lang.StringBuilder
类型使用的时间为:146毫秒
操作java.lang.String
类型使用的时间为:139毫秒
将testStringBuilder
改为
StringBuilder s4= new StringBuilder(s1).append(s2).append(s3);
操作java.lang.StringBuilder
类型使用的时间为:110毫秒
可以看出,直接使用 s1 的 + 运算,速度要快还要快些。不把StringBuilder
转成String
时, 情况好一点。
原因分析: 其实String
的 + 本质上就是StringBuilder
运算,估计JAVA还做了一些优化,导至速度比StringBuilder
还快。
得出结论是,多个变量一次性拼接的场景,直接使用 String +
速度不差,便如果有不需要转成String的话,StringBuilder
还是优秀一些。
StringBuilder
连续多次不转》 String
连接多次》StringBuilder
连续多次转
2: 多次拼接场景谁更优秀
@Test
public void testString () {String s="";long begin = System.currentTimeMillis();for(int i=0; i<500000; i++){String s1 = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" ;String s2 = s1 + "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" ;String s3 = s2+ "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ;}long over = System.currentTimeMillis();System.out.println("操作"+s.getClass().getName()+"类型使用的时间为:"+(over-begin)+"毫秒");
}
@Test
public void testStringBuilder () {StringBuilder sb = new StringBuilder();long begin = System.currentTimeMillis();for(int i=0; i<500000; i++){String s1 = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" ;StringBuilder s4= new StringBuilder(s1);String s2 = "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" ;s4.append(s2);String s3 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ;s4.append(s3);// s4.append(UUIDUtil.uuid());}long over = System.currentTimeMillis();System.out.println("操作"+sb.getClass().getName()+"类型使用的时间为:"+(over-begin)+"毫秒");
}
操作java.lang.StringBuilder
类型使用的时间为:110毫秒
操作java.lang.String
类型使用的时间为:205毫秒
可以看出,如果是非连续的场景,StringBuilder
性能已经远远的超过了String。
让StringBuilder 更进一步
@Test
public void testStringBuilder () {StringBuilder sb = new StringBuilder();long begin = System.currentTimeMillis();for(int i=0; i<500000; i++){StringBuilder s4= new StringBuilder(300);String s1 = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" ;s4.append(s1);String s2 = "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" ;s4.append(s2);String s3 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ;s4.append(s3);// s4.append(UUIDUtil.uuid());}long over = System.currentTimeMillis();System.out.println("操作"+sb.getClass().getName()+"类型使用的时间为:"+(over-begin)+"毫秒");
}
操作java.lang.StringBuilder
类型使用的时间为:57毫秒
通过,预先设置StringBuilder
的大小(前提是你要会预估), 可以再次提升StringBuilder
能力。原因是StringBuilder
放不下时,会扩容。
让StringBuilder能力起飞的操作
@Test
public void testStringBuilder () {StringBuilder sb = new StringBuilder();long begin = System.currentTimeMillis();StringBuilder s4= new StringBuilder(300);for(int i=0; i<500000; i++){s4.setLength(0);String s1 = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" ;s4.append(s1);String s2 = "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" ;s4.append(s2);String s3 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ;s4.append(s3);// s4.append(UUIDUtil.uuid());}//加入Java开发交流君样:756584822一起吹水聊天long over = System.currentTimeMillis();System.out.println("操作"+sb.getClass().getName()+"类型使用的时间为:"+(over-begin)+"毫秒");
}
操作java.lang.StringBuilder类型使用的时间为:15毫秒
在遇到字符串拼接性能要求高的场景,性能由高到低如下:
StringBuilder
(内存复用 15mm) > StringBuilder
(预先定义内存大小 57)>StringBuilder
(拼接不转String 110) > String (连续拼接 139) > StringBuilder
(拼接转String 146)
真的起飞在这里
@Testpublic void testString () {String s="";long begin = System.currentTimeMillis();for(int i=0; i<500000; i++){String s1 = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" +"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" +"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ;}long over = System.currentTimeMillis();System.out.println("操作"+s.getClass().getName()+"类型使用的时间为:"+(over-begin)+"毫秒");}
操作java.lang.String
类型使用的时间为:0毫秒
这个已经在编译时,已经合成一个String了,没有使用append操作。如果你对性能有要求,而且可以使用,请这样用。
最后,祝大家早日学有所成,拿到满意offer
测试String, StringBuilder,StringBuffer 的数据,我居然发现这些了~~相关推荐
- String StringBuilder StringBuffer三者之间的区别~~~
String StringBuilder StringBuffer三者之间的区别~~~ String是字符串常量,它是典型的immutable类,被声明final class,所有的属性都是fina ...
- Java 集合 --- String, StringBuilder, StringBuffer
Java 集合 --- String, StringBuilder, StringBuffer String String的声明方式 String的不可变性 对比两个String StringBuil ...
- String StringBuilder StringBuffer 包装类 Date 类 枚举类
String,StringBuilder,StringBuffer直接的区别是: String 不可变长的字符序列 StringBuilder 可变长的字符序列,线程不安全的,效率较高 StringB ...
- String ,StringBuilder,StringBuffer的区分
String ,StringBuilder,StringBuffer的区分 一.区别 String是字符串常量,而StringBuffer和StringBuilder是字符串变量.由String创建的 ...
- String,Stringbuilder,Stringbuffer及正则表达式
掌握String StringBuilder StringBuffer类的区别 一.String String是不可变类,一旦String对象被创建之后,包含对象中的字符串序列都是不可改变的,直到类被 ...
- String , StringBuilder , StringBuffer
String 首先从String底层看起 从底层代码被final修饰,我们能看出来,String是只读字符串,他的成员方法也都默认为final方法.所以String所引用的字符串内容不能被改变 Str ...
- 千万级测试String、StringBuffer和StringBuilder的速度
面试是经常被问到String.StringBuilder和StringBuffer三者的速度有什么区别,经过测试后,这三者的执行速度关系是:StringBuilder > StringBuffe ...
- String StringBuilder StringBuffer 对比 总结得非常好
转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...
- Java回顾-String/StringBuilder/StringBuffer
一.String的特点 1.String类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 2.String是一个final类,代表不可变字 ...
- String/Stringbuilder/StringBuffer
三个的运行速度:Stringbuilder>Stringbuffer>String String最慢是因为它是字符串常量,而其他两个是字符串变量. 其中stringbuilder是非线程安 ...
最新文章
- 【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )
- 关于armv7指令集的一个直观数据
- mysql select into和insert into select
- [LCS]LCS2005服务器应用程序
- [转]JS日期选择控件
- mysql 实现非递归树_二叉树的非递归前序,中序,后序遍历算法
- asp.net后台管理系统-登陆模块-路由权限控制_1
- jQuery学习之五---效果
- [LeetCode]题解(python):068-Text Justification
- 内江计算机职业学校有哪些,内江第二计算机职业中学有哪些专业
- [Linux学习]更改默认启动图形界面或命令行
- 【TransE模型】基于分布式表示推理
- python自动修改论文格式_如何轻轻松松修改论文格式?
- 软件测试实验课ppt,实验十 团队作业6:团队项目用户验收Beta冲刺
- 做出胶卷的效果——图片循环滚动播放
- CreateCompatibleDC,CreateCompatibleBitmap,SelectObject详解
- Java语言实现的各种排序
- 通过局域网让别人访问自己的电脑项目
- PL/SQL Developer x64 官网下载、中文包、注册码
- Android 抖音爱心动画,Android自定义View实现抖音飘动红心效果