【发布时间】:2013-03-26 15:20:13
【问题描述】:
另一个question 回答了我如何在编译时评估字符串文字的连接。在我正在处理的一个项目中,我们使用StringBuffer 处理大查询的多行字符串。它只附加文字,所以它让我思考是否会发生类似的事情。
在以下代码中,缓冲区是否会在编译时附加其内容?当多个线程试图执行这个函数时,它会如何表现?
public static String querySomething(int arg){
StringBuffer buffer = new StringBuffer();
buffer.append("A quite long query");
buffer.append("that doesn't fit in one line");
buffer.append("...");
}
将String 定义为常量不是更好吗,因为它是线程安全的,而且我们知道它可以在编译时与加号运算符连接起来。比如:
private final static REALLY_LONG_QUERY1 = "A quite long query that"
+"doesn't fit in one line"
+"...";
【问题讨论】:
-
由于
StringBuffer被声明在在方法内,如果这个方法被多个线程同时调用,它不会被考虑在内。您甚至可以将其替换为StringBuilder并具有相同的行为(开销更少)。
标签: java string multithreading memory-management