在我的项目中有一些使用StringBuffer对象的代码片段,其中一小部分如下
StringBuffer str = new StringBuffer();
str.append("new " + "String()");
所以我对使用append方法和+运算符感到困惑。
即以下代码可以写为
str.append("new ").append("String()");
上面的两行是否相同?(功能是的但是)或者是否有任何特殊用途?即性能或可读性或???
感谢。
答案 0 :(得分:15)
在 情况下,使用第一个表单更有效 - 因为编译器会将其转换为:
StringBuffer str = new StringBuffer();
str.append("new String()");
因为它连接了常量。
虽然有一些更普遍的观点:
append
的两次调用最好(性能方面),以避免无缘无故地创建中间字符串StringBuilder
答案 1 :(得分:6)
实际上,字节码编译器将替换所有涉及调用StringBuffer
的Java程序中非常量的字符串连接。那是
int userCount = 2;
System.out.println("You are the " + userCount + " user");
将被重写为
int userCount = 2;
System.out.println(new StringBuffer().append("You are the ").append(userCount).append(" user").toString());
至少在反编译用JDK 5或6编译的java类文件时可观察到的是什么。请参阅this post。
答案 2 :(得分:0)
第二种形式在性能方面最有效,因为只创建了一个字符串对象并将其附加到stringbuffer。 对于1)和2)的连接结果,第一种形式创建三个字符串对象1)用于“new”2)用于“new String”3)。并且第三个字符串对象连接到字符串缓冲区。
答案 3 :(得分:0)
除非您使用并发系统,否则请使用StringBuilder而不是StringBuffer。它更快但不是线程安全的:))
它也共享相同的API,因此它或多或少是直接查找/替换 -