StringBuffer sb=new StringBuffer("Hello");
sb.append("welcome");//working
sb.concat("hi");//not working
Run Code Online (Sandbox Code Playgroud)
为什么我不能在这里使用concat?
因为StringBuffer中没有名为concat的方法.等效的方法是追加.
您可能会想到String.Both中方法concat的术语是不同的.在String中,concat方法每次都返回一个新的String,因为String是不可变的但是在StringBuffer的情况下,同样的对象被修改.当你必须追加大的时候数据量总是用于StringBuffer或StringBulider(如果你没有使用线程),这将为你提供更多的性能.
字符串代码:
String str="hello";
String strCon=str.concat("world");//return's new concatenated string,str not changed
Run Code Online (Sandbox Code Playgroud)
StringBuffer/Builer代码:
StringBuffer strBuff=new StringBuffer("hello");
strBuff.append("world");//strBuff changed
Run Code Online (Sandbox Code Playgroud)
为什么存在这3个类?
首先,String类是不可变的:如果你在String对象上调用一个方法,它会改变它中的某些东西,你将在结果中得到一个新的String.
但是,在某些情况下,这可能不是您可能想要的,可能是因为您经常处理字符串并且不希望每次更改某些内容时都创建新对象.这就是为什么添加StringBuffer的原因.
StringBuffer也被设计为线程安全的.这意味着您可以为大多数方法获得额外的开销.因此,如果你的程序需要大量的字符串处理(jgrep相似),它可能会成为一个瓶颈.
最后,添加了StringBuilder.这基本上是没有同步的StringBuffer.
那个奇怪的命名怎么样?具有讽刺意味的是,为了避免混淆......由于concat已经在String中,但是返回一个新对象,最好做的是添加另一个方法.