请问在java中StringBuffer、StringBuilder、String有什么区别?
在网上看到的答案都是说什么可变不可变,有谁能举例说明什么是可变的什么是不可变的,请说详细点!!...
在网上看到的答案都是说什么可变不可变,有谁能举例说明什么是可变的什么是不可变的,请说详细点!!
展开
4个回答
展开全部
StringBuffer与StringBuilder的区别主要是前者是线程安全的,就是说它是同步的;后者不安全,不是同步的,其它的区别不大。当你的程序不需要线程同步,一般都用StringBuilder.
StringBuilder(以下简称sb)与String(以下简称str)的区别是:
举个例子吧:
String s = new String(“woshizifuchuan”);
当你要改变s的时候,比如改为s =s+”dsdsdsd”;
系统会重新创建一个字符串变量它的值为”woshizifuchuandsdsdsd”,然后把该字符串赋值给s.
当你这样的改变s的行为在一个循环里面,那么将会创建大量的中间变量,影响程序的运行效率:如:for(int i=0;i<100000;i++){
s=”a”;
}
StringBuilder sb = new StringBuilder();一次性给sb分配一个固定长度大小的内存空间,当你改变的时候会在此空间后面加上,不够的时候,内存空间自动增加.
比如初始分配的内存大小为10字节,那么.
Sb.append(“as”);它占据内存空间10字节,此时sb.toString().equals(“as”)为true;
Sb.append.(“qqq”),它占据的内存空间还是10字节,sb.toString().equals(“asqqq”)为true.
当内存空间不够的时候,自动加长,加入一次增加10字节,那么:
Sb.append(“ppppppp”),它占据的内存空间为20字节.
StringBuilder允许设定它的初始长度和每次增加的长度。
综合来说:当你大量更一个字符串的时候,String消耗的内存空间小,但是执行效率低。
StringBuilder(以下简称sb)与String(以下简称str)的区别是:
举个例子吧:
String s = new String(“woshizifuchuan”);
当你要改变s的时候,比如改为s =s+”dsdsdsd”;
系统会重新创建一个字符串变量它的值为”woshizifuchuandsdsdsd”,然后把该字符串赋值给s.
当你这样的改变s的行为在一个循环里面,那么将会创建大量的中间变量,影响程序的运行效率:如:for(int i=0;i<100000;i++){
s=”a”;
}
StringBuilder sb = new StringBuilder();一次性给sb分配一个固定长度大小的内存空间,当你改变的时候会在此空间后面加上,不够的时候,内存空间自动增加.
比如初始分配的内存大小为10字节,那么.
Sb.append(“as”);它占据内存空间10字节,此时sb.toString().equals(“as”)为true;
Sb.append.(“qqq”),它占据的内存空间还是10字节,sb.toString().equals(“asqqq”)为true.
当内存空间不够的时候,自动加长,加入一次增加10字节,那么:
Sb.append(“ppppppp”),它占据的内存空间为20字节.
StringBuilder允许设定它的初始长度和每次增加的长度。
综合来说:当你大量更一个字符串的时候,String消耗的内存空间小,但是执行效率低。
展开全部
StringBuilder 没用过
StringBuffer 一般用于字符串拼接,!他有个append(“字符串")的方法 用于字符串拼接效率比String的+= 要高。
String的 每一次赋值就是创建一个对象! 所以他的效率比较低!
如:String str=new String();
str=“234”; 两个str其实在内存里面已经创建了两个对象
StringBuffer 一般用于字符串拼接,!他有个append(“字符串")的方法 用于字符串拼接效率比String的+= 要高。
String的 每一次赋值就是创建一个对象! 所以他的效率比较低!
如:String str=new String();
str=“234”; 两个str其实在内存里面已经创建了两个对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String是不可变的。也就是说只要用String定义了一个对象,当对他进行修改的时候,都是新建一个String,而不是在原有的基础上修改而成的。
StringBuffer可变。线程安全~所以效率比StringBuilder低一点。
StringBuilder可变字符串,可通过aappend等方法对字符串进行修改。线程不安全,是sun为了追求极致写的。效率比StringBuffer高。
StringBuffer可变。线程安全~所以效率比StringBuilder低一点。
StringBuilder可变字符串,可通过aappend等方法对字符串进行修改。线程不安全,是sun为了追求极致写的。效率比StringBuffer高。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询