@参考文章

方法及原理:

方法1:a=a+b实际上另开辟一个空间c=a+b;然后将c的引用赋给a

方法2:a += b实际上是建立一个StringBuffer,然后调用append(),最后再将StringBuffer toSting();等同于StringBuffer sb=new StringBuffer(a);sb.ppend(b);a=sb.toString();

方法3:a.append(b);StringBuffer.append(字符串)

方法4:a.append("1" + "2");StringBuffer.append(字符串相加)

方法5:a.append("1");a.append("2");多次StringBuffer.append()

完整代码如下:注意方法3、4、5比方法1、2运算多了一个数量级

public class Test {
public static void main(String[] args) throws Exception {
//为了避免垃圾回收影响,分多次执行。
for (int k = 0; k < 3; k++) {
// method1();
//method2();
// method3();
// method4();
method5();
}
} // 方法1,定义两个字符串相加
private static void method1() {
long start = System.currentTimeMillis();
String a = new String();
for (int i = 0; i < 100000; i++) {
String b = "1";
a = a + b;
}
System.out.println(System.currentTimeMillis() - start);
} // 方法2,定义一个字符串然后+=
private static void method2() {
long start = System.currentTimeMillis();
String a = new String();
for (int i = 0; i < 100000; i++) {
String b = "1";
a += b;
}
System.out.println(System.currentTimeMillis() - start);
} // 方法3,StringBuffer 多个append
private static void method3() {
long start = System.currentTimeMillis();
StringBuffer a = new StringBuffer();
for (int i = 0; i < 1000000; i++) {
a.append("1");
}
System.out.println(System.currentTimeMillis() - start);
} // 方法4,StringBuffer 多个append
private static void method4() {
long start = System.currentTimeMillis();
StringBuffer a = new StringBuffer();
for (int i = 0; i < 1000000; i++) {
a.append("1" + "2");
}
System.out.println(System.currentTimeMillis() - start);
} // 方法5,StringBuffer 多个append
private static void method5() {
long start = System.currentTimeMillis();
StringBuffer a = new StringBuffer();
for (int i = 0; i < 1000000; i++) {
a.append("1");
a.append("2");
}
System.out.println(System.currentTimeMillis() - start);
}
}

各自运算结果如下:

方法1:2827、2926、2965

方法2:2771、2994、3072

方法3:33、27、26

方法4:38、29、28

方法5:58、53、54

结论:大数据量操作字符串时,性能上

1、StringBuffer明显优于String

2、StringBuffer.append(字符串相加)优于多次StringBuffer.append()

JAVA中字符串操作几种方式对比的更多相关文章

  1. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  2. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  3. 【转】Java中创建对象的5种方式

    Java中创建对象的5种方式   作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有 ...

  4. K:java中序列化的两种方式—Serializable或Externalizable

    在java中,对一个对象进行序列化操作,其有如下两种方式: 第一种: 通过实现java.io.Serializable接口,该接口是一个标志接口,其没有任何抽象方法需要进行重写,实现了Serializ ...

  5. JAVA截取字符串的几种方式

    在java中提供了很多字符串截取的方式.下面就来看看大致有几种. 1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的性能损 ...

  6. Java中创建对象的5种方式

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

  7. 第一弹:Java 中创建对象的4种方式

    Java 是面向对象的语言,不可避免的,"对象"这个概念是 Java 语言的核心部分,这里来简单讨论一下在 Java 中创建一般对象的方法. 总结下来有以下4种创建对象的方法: 使 ...

  8. Java中创建对象的5种方式 &&new关键字和newInstance()方法的区别

    转载:http://www.kuqin.com/shuoit/20160719/352659.html 用最简单的描述来区分new关键字和newInstance()方法的区别:newInstance: ...

  9. Java技术——Java中创建对象的5种方式

    此文为译文 原文连接:https://dzone.com/articles/5-different-ways-to-create-objects-in-java-with-ex 0. 前言 作为Jav ...

随机推荐

  1. Actifio CDS 2TB MDisk limits

    **** updated 7 Aug 2016 - reformatted and corrected out of date info *** Background Depending on you ...

  2. Spring的学习和源码的学习

    PS:Spring中有各种的Templeate,比如jdncTemplate,主要是为了避免各种模板的代码,抽象出来的 PS: @Configration.@Bean是用来替代xml那种解析方式 PS ...

  3. html总结2

    (1)选择器: 1.标签选择器:用于修饰同类HTML标签的共性风格 <style type="text/css"> li{ color:red; font-size:2 ...

  4. C# 流总结

    前言 本篇文章简单总结了在C#编程中经常会用到的一些流.比如说FileStream.MemoryStream. BufferedStream. NetWorkStream. StreamReader/ ...

  5. QQ群成员发言次数统计(正则表达式版)

    1.先将QQ群的消息记录以.txt文件格式导出来,保存路径及名称自己定义(在本文我导出到Y盘,命名为test.txt) 2.程序如下: data statistics1; if _n_=1 then ...

  6. 在WINDOWS7下无U盘安装WINDOWS10

    第一步:下载cn_windows_10_business_editions_version_1803_updated_march_2018_x64_dvd_12063730.iso 第二步:解压里面的 ...

  7. 涨姿势:Java 异常?尝试自定义异常

    1.异常 在Java中,每个异常都是一个名叫Throwable的类的一个实例 我们常用的try-catch-finally语句 try 尝试去执行try语句块里的内容,如果有异常,将其捕获,并执行ca ...

  8. WM消息对应的Message消息中的Lparam和WParam

    具体的消息表示: 1. WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高 2. 滚动条WM_VSCROLL或WM_HSCROLL消息,LOWOR ...

  9. rabbitmq (一)用法

    首先,主机一是window系统,虚拟机二 ubuntu, ubuntu部署了rabbitmq服务端.默认监听5672端口. 由于rabbitmq内部有严格的权限系统,使用之前必须配置好权限. 默认网页 ...

  10. Chrome 插件安装技巧

    参考http://blog.csdn.net/shiyaru1314/article/details/49303317 最近在学习WEBAPI  由于没有界面可以调试,需要安装Chrome中的插件 P ...