本文概述
String和StringBuffer之间有很多区别。下面列出了String和StringBuffer之间的差异:
没有。 | 串 | StringBuffer |
---|---|---|
1) | 字符串类是不可变的。 | StringBuffer类是可变的。 |
2) | 当你连接太多字符串时, String速度很慢, 并且会占用更多内存, 因为每次创建新实例时, String都会出现。 | 当你可以分配字符串时, StringBuffer速度很快, 消耗的内存更少。 |
3) | 字符串类覆盖Object类的equals()方法。因此, 你可以通过equals()方法比较两个字符串的内容。 | StringBuffer类不会覆盖Object类的equals()方法。 |
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 with StringBuffer: "+(System.currentTimeMillis()-startTime)+"ms");
}
}
Time taken by Concating with String: 578ms
Time taken by Concating with StringBuffer: 0ms
String和StringBuffer HashCode测试
正如你在下面给出的程序中看到的那样, 当你连接字符串时, 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
评论前必须登录!
注册