在 java 中,String 类型其实是一个常量,尽管看起来是一个变量,而也一直当成变量来用,然而,大量使用会造成很多资源的浪费。替代方案是使用 StringBuffer,这才是一个变量。
使用 StringBuffer 有很多坑。
(1)不能直接用 .equals("") 和一个字符串常量比较。尽管也不报错,但总是返回 false。
(2)两个 StringBuffer 一个给另一个赋值怎么办?
StringBuffer a = new StringBuffer("a");
StringBuffer b = new StringBuffer();
b = a; // 这是错的,因为,a 是一个引用,以后改变 b ,也会改变 a 。
b.setLength(0);
b.append(a.toString()); // 这是正确的。
实际上,使用 StringBuffer 是很扯蛋的事情:不断 toString() 的花销不比 String 的不断分身更省资源。