String 和 StringBuffer 有很多区别。下面列出了 String 和 StringBuffer 之间的差异:

No.StringStringBuffer
1String 类是不可变的。StringBuffer 类是可变的。
2当我们连接太多字符串时,String 很慢并且会消耗更多内存,因为每次它都会创建新实例。当我们连接 t 个字符串时,StringBuffer 速度很快并且消耗的内存更少。
3String 类覆盖了 Object 类的 equals() 方法。所以可以通过equals()方法比较两个字符串的内容。StringBuffer 类不会覆盖 Object 类的 equals() 方法。
4字符串类在执行串联操作时速度较慢。StringBuffer 类在执行串联操作时速度更快。
5String类使用String常量池。StringBuffer 使用堆内存

String和StringBuffer的性能测试

ConcatTest.java

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 类连接字符串所需的时间。

String 和 StringBuffer 哈希值测试

正如我们在下面给出的程序中看到的,String 在执行连接时返回新的哈希值,但 StringBuffer 类返回相同的哈希值。

InstanceTest.java

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

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想