java String拼接的方法选择及性能分析

String 拼接的方法选择

在拼接静态字符串时,尽量用 +,因为通常编译器会对此做优化,如:

 String test = "this " + "is " + "a " + "test " + "string"

编译器会把它视为:

 String test = "this is a test string"

在拼接动态字符串时,尽量用 StringBuffer 或 StringBuilder的 append,这样可以减少构造过多的临时 String 对象。

测试代码:(按照附录1修改)

 1 public class teststring {
 2
 3     public void testPlus() {
 4         String s = "";
 5         long ts = System.currentTimeMillis();
 6         for (int i = 0; i < 10000; i++) {
 7             s = s + String.valueOf(i);
 8         }
 9         long te = System.currentTimeMillis();
10         System.out.println("+ cost {} ms  "+( te - ts));
11     }
12
13     public void testConcat() {
14         String s = "";
15         long ts = System.currentTimeMillis();
16         for (int i = 0; i < 10000; i++) {
17             s = s.concat(String.valueOf(i));
18         }
19         long te = System.currentTimeMillis();
20         System.out.println("concat cost {} ms  "+ (te - ts));
21     }
22
23
24     public void testStringBuffer() {
25         StringBuffer sb = new StringBuffer();
26         long ts = System.currentTimeMillis();
27         for (int i = 0; i < 10000; i++) {
28             sb.append(String.valueOf(i));
29         }
30         sb.toString();
31         long te = System.currentTimeMillis();
32         System.out.println("StringBuffer cost {} ms  "+(te - ts));
33     }
34
35     public void testStringBuilder() {
36         StringBuilder sb = new StringBuilder();
37         long ts = System.currentTimeMillis();
38         for (int i = 0; i < 100000; i++) {
39             sb.append(String.valueOf(i));
40         }
41         sb.toString();
42         long te = System.currentTimeMillis();
43         System.out.println("StringBuilder cost {} ms  "+(te - ts));
44     }
45
46     public static void main(String[] args) {
47         teststring a = new teststring();
48         a.testConcat();
49         a.testPlus();
50         a.testStringBuffer();
51         a.testStringBuilder();
52     }
53 }

运行结果:

concat cost {} ms 113
+ cost {} ms 195
StringBuffer cost {} ms 2
StringBuilder cost {} ms 9

附录:

Java 5种字符串拼接方式性能比较 http://blog.csdn.net/kimsoft/article/details/3353849

2 Java 性能优化之 String 篇  http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/

时间: 2024-11-05 11:42:14

java String拼接的方法选择及性能分析的相关文章

java String 提供的方法

String类的判断功能: 1 * boolean equals(Object obj):比较字符串的内容是否相同,区分大小写 2 * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写 3 * boolean contains(String str):判断大字符串中是否包含小字符串 4 * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头 5 * boolean endsWith(St

java String 中 intern方法的概念

1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null: 3. String str=”kvill”:String str=new String (“kvill”);的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念. 常量池(const

SylixOS调试方法详解——性能分析

1. SylixOS调试方法介绍 SylixOS实现了一个功能强大的调试stub(桩),可在设备或模拟器上在线调试应用程序,RealEvo-IDE也提供配套的调试插件.目前RealEvo-IDE既支持自动推送调试.也支持传统的手动启动gdbserver的调试方式.在官方公布的使用手册中没有详细写出在日常开发中非常实用的几种调试方式,本文主要介绍性能分析的调试方法. 在日常开发过程中经常会遇到程序不够快的情况,但是不知道到底慢在哪里,往往是随意寻找函数优化,并没有没有真正定位到程序哪里慢,存在很大

30天C#基础巩固------this,base,string中的方法,StringBuilder性能

这里主要是记录下自己学习笔记,希望有个地方在以后可以看到自己走过的路. 关于之前多态的知识有一个口诀,很好理解里面的override和new,virtual关键字. "new则隐藏,over重写,隐藏看类型,重写只管新" 面向对象的三大特征:封装,继承,多态. 非面向对象的特征---静态 静态一般的是使用的是方法,很少有字段. 下面是修饰符的图片,关于修饰符这个要在项目中使用,慢慢的理解. 一:this和base的区别. 这两个都是在我们进行开发经常使用的,关于this代表类的本身,我

[JAVA] String 拼接效率

344. Reverse String Write a function that takes a string as input and returns the string reversed. Example:Given s = "hello", return "olleh". 一开始写了一个代码 class Solution { public String reverseString(String s) { int len = s.length(); Stri

Java字符串拼接新方法 StringJoiner

Java中如何输出像1-2-3-4-5 这样的字符 抱歉对于这个问题我甚至不能想到一个合适的标题,但是不重要 以下操作基于 jdk 1.8 StringJoiner sj = new StringJoiner("-", "", ""); sj.add("1").add("1").add("2"); String desiredString = sj.toString(); 在1.8版本中

java String拼接时候的一个小问题

刚才发现了一个小问题,比如我们设置一个字符串对象test并初始化为null,然后执行test+="abc";,此时test的值不是abc,而是nullabc.这是因为我们实际上是让test="abc"+null;,此时null会被强制转为String类型,其值就是"null".例如下面的例子: String test=null+"abc"; System.out.println(test); 输出就是nullabc 所以我们在

Java数组拼接字符串几个写法性能比较(转载)

将数组 int[] arr = {0,1,2,3,4,5,6,7,8,9} 拼接成 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 字符串: StringBuilder sb = new StringBuilder(arr.length*3); // StringBuilder(arr.length*3)性能比StringBuilder()高sb.append("["); // 写法1for( int i = 0, len = arr.length; i < len

java String的各种方法及操作

No. 方法名称 功能 字符与字符串 01 public String(char[] value) 将字符数组中所有内容变为字符串 02 public String(char[] value,int offset,int count) 将字符数组中部分内容变为字符串 03 public char charAt(int index) 取得指定索引位置的字符,索引从0开始 04 public char[] toCharArray() 将字符串变为字符数组返回 字节与字符串 01 public Str