@参考文章

方法及原理:

方法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. ios-上传图片到后台

    做第一个项目时,有个版块的个人信息的编辑涉及到头像修改,老大说项目里有通用的代码,让我自己去找.总算找到,搞了许久才弄好,看来理解能力还需要提高啊!! #pragma mark- 修改头像上传后保存 ...

  2. telnet-redis-quit

    很多时候 telnet 完就无法退出了,ctrl+c 有时也无法退出后来找到了正确的命令 ctrl+] 然后在telnet 命令行输入 quit 就可以退出了 telnet Trying 10.168 ...

  3. kafka-producer配置

    kafka-producer版本对比 Kafka的producer的API根据版本的不同分为kafka0.8.1.X之前的 kafka.javaapi.producer.Producer.以及之后版本 ...

  4. libsvm数据格式

    train.txt 1 101:1.2 102:0.03 0 1:2.1 10001:300 10002:400 0 0:1.3 1:0.3 1 0:0.01 1:0.3 0 0:0.2 1:0.3 ...

  5. Spark性能优化指南——高级篇

    本文转载自:https://tech.meituan.com/spark-tuning-pro.html 美团技术点评团队) Spark性能优化指南——高级篇 李雪蕤 ·2016-05-12 14:4 ...

  6. [UE4]VR角色形象:Lock to Hmd、Use Pawn Control Rotation

    Camera组件是自动跟着头显一起移动的,所以只要给Camera的子控件添加一个Static Mesh或者Skeletal Mesh并选择合适的模型就可以了. 要记得勾选Lock to Hmd(锁定到 ...

  7. iOS 解压Assets.car文件

    查看Assets.xcassets打包ipa之后Assets.car的图片资源 不经常使用 记录一份:原文地址http://www.jianshu.com/p/a5dd75102467 cartool ...

  8. 10-安装es

    1.安装jdk(jdk要求1.8.20或1.7.55以上) 2.上传es安装包 3.解压es tar -zxvf elasticsearch-2.3.1.tar.gz -C /opt/app/ 4.e ...

  9. RobotFramework - AppiumLibrary 之元素定位

    一.介绍 AppiumLibrary 是 Robot Framework 的App测试库. 它使用Appium 与Android 和 iOS应用程序进行通信,类似于Selenium WebDriver ...

  10. AlexNet实践

    注释: CNN使用TF搭建比较简单,就像Hough检测使用CV很简单一样.但是怎么使用CNN去做一些实际操作,或者说怎么使用现有的方法进行慢慢改进,这是一个很大的问题! 直接跟着书本或者视频学习有点膨 ...