String和StringBuffer之间的区别

本文概述

  • String和StringBuffer的性能测试
  • String和StringBuffer HashCode测试
String和StringBuffer之间有很多区别。下面列出了String和StringBuffer之间的差异:
没有。 StringBuffer
1) 字符串类是不可变的。 StringBuffer类是可变的。
2) 当你连接太多字符串时, String速度很慢, 并且会占用更多内存, 因为每次创建新实例时, String都会出现。 当你可以分配字符串时, StringBuffer速度很快, 消耗的内存更少。
3) 字符串类覆盖Object类的equals()方法。因此, 你可以通过equals()方法比较两个字符串的内容。 StringBuffer类不会覆盖Object类的equals()方法。
String和StringBuffer之间的区别

文章图片
String和StringBuffer的性能测试
public class ConcatTest{ public static String concatWithString(){ String t = "Java"; for (int i=0; i< 10000; i++){ t = t + "Tpoint"; } return t; } public static String concatWithStringBuffer(){ StringBuffer sb = new StringBuffer("Java"); for (int i=0; i< 10000; i++){ sb.append("Tpoint"); } return sb.toString(); } public static void main(String[] args){ long startTime = System.currentTimeMillis(); concatWithString(); System.out.println("Time taken by Concating with String: "+(System.currentTimeMillis()-startTime)+"ms"); startTime = System.currentTimeMillis(); concatWithStringBuffer(); System.out.println("Time taken by Concating withStringBuffer: "+(System.currentTimeMillis()-startTime)+"ms"); } }

Time taken by Concating with String: 578ms Time taken by Concating withStringBuffer: 0ms

String和StringBuffer HashCode测试 【String和StringBuffer之间的区别】正如你在下面给出的程序中看到的那样, 当你连接字符串时, String返回新的哈希码值, 但是StringBuffer返回相同的值。
public class InstanceTest{ public static void main(String args[]){ System.out.println("Hashcode test of String:"); String str="java"; System.out.println(str.hashCode()); str=str+"tpoint"; System.out.println(str.hashCode()); System.out.println("Hashcode test of StringBuffer:"); StringBuffer sb=new StringBuffer("java"); System.out.println(sb.hashCode()); sb.append("tpoint"); System.out.println(sb.hashCode()); } }

Hashcode test of String: 3254818 229541438 Hashcode test of StringBuffer: 118352462 118352462

    推荐阅读