@参考文章

方法及原理:

方法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. 解决Android Studio在Ubuntu上出现“sdk/platform-tools/adb: error=2, No such file or directory”的方法

    转载至http://blog.163.com/china_uv/blog/static/11713726720136931132385/ 刚安装Ubuntu14.5时运行Android Studio可 ...

  2. .Net MVC TextBoxFor 扩展 placeholder 与 class 属性

    namespace System.Web.Mvc { public static class HtmlHelperExtensions { public static MvcHtmlString Bs ...

  3. Centos6.5部署Sonar6.7.1备注

    1.一定要用非root账号登录(自己建立账号),建立Sonar目录并部署,因为使用了Elasticsearch 5.6.3做搜索服务器,而它不允许用root账号启动服务,会报如下错误: Excepti ...

  4. 简述Ajax原理及实现步骤

    简述Ajax原理及实现步骤 1.Ajax简介 概念 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML). 现在允许浏览器与务器通信 ...

  5. Ubuntu 14.10 下安装Ambari 问题汇总

    在编译安装Ambari时候遇到了很多问题,现在记录一下 1 got error npm ERR! phantomjs@1.9.12 install while building ambari-web ...

  6. 20165312 2017-2018-2《JAVA程序设计》第8周学习总结

    20165312 2017-2018-2<JAVA程序设计>第8周学习总结 一.第十二章知识点总结 进程与线程 进程是程序的一次动态执行进程,它对应了从代码加载.执行至执行完毕的一个完整过 ...

  7. SAS 评分卡开发模型变量统计及输出

    以下代码实现功能: 1.获取10个模型分别使用哪些变量 2.变量所模型使用的次数 3.把上表格输出到EXCEL中 %INCLUDE '00@HEADER.SAS'; %let dir=..\04@Mo ...

  8. background-position,有逗号和没逗号:截然不同的结果

    写星级评分demo的时候,发现background-position这个属性有点神奇 如上图,在其值中加“,”与不加“,”会带来截然不同的结果,来研究一哈,顺便把这个属性复习一下 1.backgrou ...

  9. leetcode78

    本题是回溯法的基本应用,深度优先遍历,使用递归实现. class Solution { public: ]; vector<vector<int>> R; int n; //t ...

  10. leetcode102

    本题是广度优先遍历(BFS)实现树的层次遍历,使用队列实现. class Solution { public: vector<vector<int>> levelOrder(T ...