Java字符串参数化

Java字符串参数化,java,string,concatenation,string-concatenation,parameterized,Java,String,Concatenation,String Concatenation,Parameterized,在我的一个java工具中,我反复创建了一些字符串,其中包含的变量不断变化,如下所示: for (String value : values) { // unrelated code omitted for clarity String outputValue = "blah blah blah " + foo + " blah " + bar + " blah"; // code that writes out the created outputValue } 我忍不

在我的一个java工具中,我反复创建了一些字符串,其中包含的变量不断变化,如下所示:

for (String value : values) {
    // unrelated code omitted for clarity
    String outputValue = "blah blah blah " + foo + " blah " + bar + " blah";
    // code that writes out the created outputValue
}
我忍不住觉得这不是在创建的
字符串
中使用“参数”的最佳方法,因为非参数文本总是相同的。然而,据我所知,使用
String.format
或类似的插件插入这些参数实际上比简单的串联效率要低

有没有更好/更有效的(相对于内存而言)方法来创建这些参数化字符串

据我所知,使用String.format或类似的插件 参数的效率实际上不如简单的串联

你有什么证据支持这一点?考虑到你的应用程序正在做的其他事情,为什么你认为值得担心呢?听起来像是一个微观优化


如果您的需求广泛,我会推荐任何模板解决方案,如Velocity。

最有效的方法可能是使用StringBuilder

StringBuilder builder = new StringBuilder("blah blah blah");
builder.append(yourvalue).append("blah");

StringBuilder允许避免多个昂贵的字符串连接。当您最终完成时,只需调用
builder.toString()
即可获得最终字符串。

这是一种折衷方法,即使用
StringBuffer
StringBuilder
读取一行代码的好方法和高效的难读代码。所以我认为这个问题没有普遍的答案。取决于什么质量对你更有价值(可读性->可维护性或性能),它被调用的次数,它是否真的是你应用中的瓶颈,等等


这很好

除了使用
String.format
StringBuilder.append
而不是使用+(特别是在循环中)串接之外,不要尝试优化它。

这是在hadoop reducer中,可能有数百万个字符串被传递,所以我想我能做的任何改善都不会有什么坏处。至于String.format,它肯定必须处理字符串以确定在何处添加这些参数,而不仅仅是直接连接,这肯定是一个更便宜的过程。除了“我这么说”之外,我仍然看不到任何证据根据这一点,时间比例为5:6。我认为链接中的评论说明了我的观点。像这样的基准并不总是有意义的。也许,无论如何,我会在我的场景中对其进行测试。这除了可以说是“更干净”的代码之外,不会真的实现任何东西-请记住,我不是每个值都附加同一个字符串,所以每次我都需要一个新的生成器。编译器无论如何都会这样做。它不是“更干净”的代码,它的代码效率更高。不,编译器不会这样做。是的,它会这样做,在后台字符串连接是由StringBuilder处理的,它看起来“干净”是主观的。根据我所读的,编译器“可能”会这样做。情况并非总是如此,除非你有我没有见过的资源?很高兴了解更多信息。编译器将使用
StringBuilder
进行此操作,因为它是一行。所以在格式化和
+
之间是一个折腾。对了,对于这个特殊情况,+相当于
StringBuilder
,但是如果有
outputValue+=“a”+foo+“b”+bar+“c”
,它就不会。我喜欢明确地提到一些事情,并且不依赖于一些隐藏的魔法:)StringBuilders不是这里的解决方案-这里没有迭代地附加到同一个字符串。每次它都是一个新字符串,而串接是由StringBuilder在后台处理的。这是一行,编译器将使用
StringBuilder
。正如OP所指出的,
String.format
在这种情况下比
+
慢(因为编译器将替换
StringBuilder
)。我不知道在运行时效率有多高,但String.format()在键入方面效率更高,但是Jiri Kremser的答案中的链接强调,+串联时间性能与
String.format
的比率分别为5:6左右。