菜鸟教程 -- 学的不仅是技术,更是梦想!

Java 教程
(追記) (追記ここまで)

Java 实例 - 连接字符串

Java 实例 Java 实例

以下实例演示了通过 "+" 操作符和StringBuffer.append() 方法来连接字符串,并比较其性能:

StringConcatenate.java 文件

publicclassStringConcatenate{publicstaticvoidmain(String[]args){longstartTime = System.currentTimeMillis(); for(inti=0;i<5000;i++){Stringresult = "This is" + "testing the" + "difference"+ "between" + "String"+ "and"+ "StringBuffer"; }longendTime = System.currentTimeMillis(); System.out.println("字符串连接" + " - 使用 + 操作符 : " + (endTime - startTime)+ " ms"); longstartTime1 = System.currentTimeMillis(); for(inti=0;i<5000;i++){StringBufferresult = newStringBuffer(); result.append("This is"); result.append("testing the"); result.append("difference"); result.append("between"); result.append("String"); result.append("and"); result.append("StringBuffer"); }longendTime1 = System.currentTimeMillis(); System.out.println("字符串连接" + " - 使用 StringBuffer : " + (endTime1 - startTime1)+ " ms"); }}

以上代码实例输出结果为:

字符串连接 - 使用 + 操作符 : 0 ms
字符串连接 - 使用 StringBuffer : 6 ms

Java 实例 Java 实例

AI 思考中...

2 篇笔记 写笔记

  1. #0

    九刃

    528***[email protected]

    6

    案例扩展认知:+"为每个字符串变量赋值,公用一个内值,占用一份内存空间;"StringBuffer"每次新建一个新对象,内存分配新的空间,新分配5000份内存空间;

    public class StringConcatenate {
     public static void main(String[] args){
     long startTime = System.currentTimeMillis();
     String[] strArr = new String[500];
     for(int i=0;i<500;i++){
     String result = "This is";
     strArr[i]=String.valueOf(result.hashCode());
     }
     long endTime = System.currentTimeMillis();
     System.out.println("字符串连接" 
     + " - 使用 + 操作符 : " 
     + (endTime - startTime)+ " ms");
     System.out.println(strArr[0]+"\n"+strArr[1]+"\n"+strArr[2]);
     long startTime1 = System.currentTimeMillis();
     for(int i=0;i<500;i++){
     StringBuffer result = new StringBuffer();
     result.append("This is");
     strArr[i]=String.valueOf(result.hashCode());
     }
     long endTime1 = System.currentTimeMillis();
     System.out.println("字符串连接" 
     + " - 使用 StringBuffer : "
     + (endTime1 - startTime1)+ " ms");
     System.out.println(strArr[0]+"\n"+strArr[1]+"\n"+strArr[2]);
     }
    }

    打印结果:

    字符串连接-使用+操作符:1ms
    -1027042079
    -1027042079
    -1027042079
    字符串连接-使用StringBuffer操作符:2ms1167165921
    1442002549
    1383884648

    九刃

    528***[email protected]

    9年前 (2017年07月10日)
  2. #0

    希疑

    110***[email protected]

    33

    附上另一种角度的性能分析,当需要对字符串对象的长度进行变化时,用 + 拼接的性能在循环时就会慢的慢的多,实际上 + 号拼接字符串也是通过 StringBuild 或 StringBuffer 实现的,但当进行频繁的修改本身时,+ 拼接会比直接用方法拼接产生更多的中间垃圾对象,耗用更多的内存,因此更推荐使用 StringBuild。其实我认为上述案例的性能分析是没有意义的,如果明确了要拼接的字符串的话,完全可以直接使用两种如下代码:

    result =result + "This is esting the difference between String and StringBuffer ";
    或
    result.append("This is esting the difference between String and StringBuffer" );
    
    public class Main {
     public static void main(String[] args){
     String result1 = null;
     StringBuffer result = new StringBuffer();
     long startTime = System.currentTimeMillis();
     for(int i=0;i<5000;i++){
     result1 += "This is"
     + "testing the"
     + "difference"+ "between"
     + "String"+ "and"+ "StringBuffer";
     }
     long endTime = System.currentTimeMillis();
     System.out.println("字符串连接" 
     + " - 使用 + 操作符 : " 
     + (endTime - startTime)+ " ms");
     long startTime1 = System.currentTimeMillis();
     for(int i=0;i<5000;i++){
     
     result.append("This is");
     result.append("testing the");
     result.append("difference");
     result.append("between");
     result.append("String");
     result.append("and");
     result.append("StringBuffer");
     }
     long endTime1 = System.currentTimeMillis();
     System.out.println("字符串连接" 
     + " - 使用 StringBuffer : "
     + (endTime1 - startTime1)+ " ms");
     }
    }

    输出结果:

    字符串连接 - 使用 + 操作符 : 1151 ms
    字符串连接 - 使用 StringBuffer : 2 ms

    希疑

    110***[email protected]

    8年前 (2018年09月27日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /