StringBuffer sb=new StringBuffer("Hello");
sb.append("welcome");//working
sb.concat("hi");//not working
为什么我不能在这里使用concat?
答案 0 :(得分:6)
因为StringBuffer中没有名为concat的方法。等效的方法是追加。
你可能会想到String中方法concat的术语.Both是不同的。在String中,concat方法每次返回一个新的String,因为String是不可变的但是在StringBuffer的情况下,同一个对象被修改。当你有附加大量数据总是用于StringBuffer或StringBulider(如果你没有使用线程),这将为你提供更多的性能。
字符串代码:
String str="hello";
String strCon=str.concat("world");//return's new concatenated string,str not changed
StringBuffer / Builer Code:
StringBuffer strBuff=new StringBuffer("hello");
strBuff.append("world");//strBuff changed
答案 1 :(得分:5)
为什么存在这3个类?
首先,String类是不可变的:如果你在String对象上调用一个方法,它会改变它中的某些东西,你将在结果中得到一个新的String。
但是,在某些情况下,这不是您可能想要的,也许是因为您经常处理字符串并且不希望每次更改某些内容时都创建新对象。这就是为什么添加StringBuffer的原因。
StringBuffer也被设计为线程安全的。这意味着您可以为大多数方法获得额外的开销。因此,如果你的程序需要大量的字符串处理(jgrep相似),它可能会成为一个瓶颈。
最后,添加了StringBuilder。这基本上是没有同步的StringBuffer。
那个奇怪的命名怎么样?具有讽刺意味的是,为了避免混淆......由于concat已经在String中,但是返回一个新对象,最好的办法就是添加另一个方法。
答案 2 :(得分:1)
StringBuffer或StringBuilder不是String,java.lang.String有方法concat(String)。 StringBuffer是线程安全的,StringBuilder不是。
答案 3 :(得分:0)
因为concat
或StringBuffer
没有StringBuilder
方法:
http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
答案 4 :(得分:0)
String Buffer是线程安全的,并且它的方法是同步的。 String缓冲区的imp方法是:
append(),length(),insert()。
append方法在其中追加带有现有String的字符串以获取所需的字符串。
答案 5 :(得分:0)
Append(),insert(),reverse(),replace(),capacity(),ensureCapacity();是StringBuffer.java中存在的方法;没有像“concat()”这样的方法