java中String StringBuilder StringBuffer比较和效率(性能)测试 (3)

从它们的常用方法可以看出:
String 每次返回的都是新字符串,所以我们使用String的方法操作字符串后不影响原来的字符串;
StringBuffer 和 StringBuilder 返回的都是this,也就是对象本身,所有我们可以在代码中连着写append(xx).append(xxx).append(xxx);
不同的是StringBuffer的方法就加了synchronized 也就是我们说的线程安全。
总结一下:

java中String StringBuilder StringBuffer比较和效率(性能)测试

String StringBuilder StringBuffer效率(性能)测试

我们通过各自拼接10000字符串来比较一下三者在执行时对时间和对内存资源的占用。
下面是测试代码:

package com.xzlf.string; public class TestString { public static void main(String[] args) { // 使用 String 进行字符拼接 String str = ""; long num1 = Runtime.getRuntime().freeMemory();// 获取系统剩余内存空间 long time1 = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { str += i; // 相当于产生了5000个对象 } long num2 = Runtime.getRuntime().freeMemory(); long time2 = System.currentTimeMillis(); System.out.println("String 占用了内存:" + (num1 - num2)); System.out.println("String 占用了时间:" + (time2 - time1)); // 使用 StringBuilder 进行字符串拼接 StringBuilder sb = new StringBuilder(""); long num3 = Runtime.getRuntime().freeMemory(); long time3 = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { sb.append(i); } long num4 = Runtime.getRuntime().freeMemory(); long time4 = System.currentTimeMillis(); System.out.println("StringBuilder 占用了内存:" + (num3 - num4)); System.out.println("StringBuilder 占用了时间:" + (time4 - time3)); // 使用 StringBuilder 进行字符串拼接 StringBuffer sb2 = new StringBuffer(""); long num5 = Runtime.getRuntime().freeMemory(); long time5 = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { sb2.append(i); } long num6 = Runtime.getRuntime().freeMemory(); long time6 = System.currentTimeMillis(); System.out.println("StringBuffer 占用了内存:" + (num5 - num6)); System.out.println("StringBuffer 占用了时间:" + (time6 - time5)); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxppw.html