String 和 StringBuffer 之间有很多区别。 String 和 StringBuffer 的区别列表如下:

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

String和StringBuffer的性能测试

文件代码:ConcatTest.java

public class ConcatTest{  
    public static String concatWithString()    {  
        String t = "Yiibai.com";  
        for (int i=0; i<10000; i++){  
            t = t + "vsdiffer.com";  
        }  
        return t;  
    }  
    public static String concatWithStringBuffer(){  
        StringBuffer sb = new StringBuffer("Yiibai");  
        for (int i=0; i<10000; i++){  
            sb.append("vsdiffer.com");  
        }  
        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: 571ms
Time taken by Concating with  StringBuffer: 0ms

上面的代码,使用 String 类和 StringBuffer 类计算连接字符串所需的时间。

String 和 StringBuffer HashCode 测试

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

文件代码:InstanceTest.java

package com.vsdiffer;
public class InstanceTest{  
    public static void main(String args[]){  
        System.out.println("Hashcode test of String:");  
        String str="vs";  
        System.out.println(str.hashCode());  
        str=str+"differ";  
        System.out.println(str.hashCode());  

        System.out.println("Hashcode test of StringBuffer:");  
        StringBuffer sb=new StringBuffer("vs");  
        System.out.println(sb.hashCode());  
        sb.append("differ");  
        System.out.println(sb.hashCode());  
    }  
}
Hashcode test of String:
3773
1439922287
Hashcode test of StringBuffer:
865113938
865113938
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:String和StringBuffer的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-string-vs-stringbuffer.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。