关于String连接性能的分析,有很多争论,很多人认为应该使用StringBuilder或StringBuffer来进行连接,也有一部分人持有现代虚拟机已经对这个做了优化了,具体怎么样,测试一下呗!
public class StringContactTest {
private static final int COUNT = 5000;
public static void main(String[] args) {
String s = "";
testContact(s);
testBuilderContact(s);
testBufferContact(s);
}
public static void testContact(String s) {
long start = System.nanoTime();
for (int i = 0; i < COUNT; i++) {
s += i;
}
long end = System.nanoTime();
System.out.println("contact: " + (end - start));
}
public static void testBufferContact(String s) {
long start = System.nanoTime();
StringBuffer sb = new StringBuffer();
sb.append(s);
for (int i = 0; i < COUNT; i++) {
sb.append(i);
}
sb.toString();
long end = System.nanoTime();
System.out.println("StringBuffer: " + (end - start));
}
public static void testBuilderContact(String s) {
long start = System.nanoTime();
StringBuilder sb = new StringBuilder();
sb.append(s);
for (int i = 0; i < COUNT; i++) {
sb.append(i);
}
sb.toString();
long end = System.nanoTime();
System.out.println("StringBuilder: " + (end - start));
}
}
运行结果:
contact: 79631000
StringBuilder: 1567000
StringBuffer: 2324000
可以看出,差别还是存在的。
其实这个代码不难,想说的主要有两点:
1 比较时间,最好用nanoTime,在现代计算机上,ms粒度太粗了;
2 在比较字符串连接时,StringBuilder中需要算上new和toString的时间,因为这个在字符串+时是不需要这两步的;
PS:这个测试其实不全面,比较全面的测试还需要针对数量级不同做对比,比如5、50、500、50000等。
分享到:
相关推荐
String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别
stringbuilder用法 String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String...
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
String ,StringBuffer与StringBuilder的区别
介绍了String、StringBuffer、StringBuilder的使用方法,以及理论知识
javase部分String的相关基础知识,String的构造方法总结比较以及各自的应用场景(代码举例),常用的容器类StringBuilder和StringBuffer的关系比较(图示)以及两者的区别联系和具体哪中场景下用哪个类。
String,StringBuilder,StringBuffer
StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
String及StringBuffer和StringBuilder的区别
String、StringBuilder以及StringBuffer的区别
关于String、StringBuilder、StringBuffer的本质区别,
主要介绍了Java 中String StringBuilder 与 StringBuffer详解及用法实例的相关资料,需要的朋友可以参考下
简单的介绍了String、StringBuffer和StringBuilder的区别
String、StringBuffer 和 StringBuilder 的区别 碎碎念 简单认识这三个对象 String StringBuffer StringBuilder 深入理解 String、StringBuilder、StringBuffer 从设计角度理解 String StringBuilder StringBuffer ...
主要介绍了java String、StringBuilder和StringBuffer的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
目录StringStringBuffer与StringBuilder总结 String ...StringBuffer与StringBuilder 这两者基本相似,都是可变字符串对象,主要区别为线程是否安全。 总结 最后,引用菜鸟教程下的总结以及相关评论: S
string,stringbuffer,stringbuilder
//true}补充:String对象的intern方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String对象的equals结果是
java中StringBuilder,StringBuffer,Vector的区别