ylbtech-Java-Runoob-高级教程-实例-字符串:14. Java 实例 - 连接字符串
1.返回顶部
1、

Java 实例 - 连接字符串

 Java 实例

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

StringConcatenate.java 文件

public class StringConcatenate {
public static void main(String[] args){
long startTime = System.currentTimeMillis();
for(int i=0;i<5000;i++){
String result = "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++){
StringBuffer result = new StringBuffer();
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");
}
}

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

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

 Java 实例

2、
2.返回顶部
1、
扩展案例1

案例扩展认知:+"为每个字符串变量赋值,公用一个内值,占用一份内存空间;"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
2、
扩展案例2

附上另一种角度的性能分析,当需要对字符串对象的长度进行变化时用 + 拼接的性能在循环时就会慢的慢的多,实际上 + 号拼接字符串也是通过 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
3、
3.返回顶部
 
4.返回顶部
 
5.返回顶部
1、
2、
 
6.返回顶部
 
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

最新文章

  1. sublime text install packages报错
  2. 【转】HTML5 jQuery图片上传前预览
  3. 慕课网-Java入门第一季-7-5 Java 中带参无返回值方法的使用
  4. EXCEL的导入导出
  5. 安装SqlServer的时候性能计数器注册表配置单元一致性失败的解决办法
  6. switch语句
  7. 我的首个MOOC课程《面向对象软件开发实践》
  8. Windows 32 程序设计
  9. 在完成端口中使用GetAcceptExSockaddrs
  10. 在linux设置环境变量
  11. java中Integer包装类的具体解说(java二进制操作,全部进制转换)
  12. html5权威指南:表格元素
  13. 【将txt文本转图片】
  14. 《java技术》第二次作业
  15. python字符串27种常见的方法
  16. URI ,URL 和 URN
  17. CST2017 安装问题
  18. [转载]Oracle用户创建及权限设置
  19. WPF自定义控件(一)の控件分类
  20. SSH框架搭建过程详解

热门文章

  1. 【构造+DFS】2017多校训练三 HDU 6060 RXD and dividing
  2. .NET 调用java webservice保存datetime类型数据为空的解决办法
  3. 12.1——类的定义与声明,隐含的this指针
  4. hdu 4045 Machine scheduling [ dp + 斯特林数]
  5. [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  6. 51nod 马拉松30 C(构二分图+状压dp)
  7. Codechef-CHEFPRAD(找事件点+贪心)
  8. idea、jdk、eclispe中空main方法的线程数量不一样,why?
  9. HUNT:一款可提升漏洞扫描能力的BurpSuite漏洞扫描插件
  10. 【c++】C++中const用法总结