String.join()vs其他字符串连接操作

我已经快速阅读了Java8 String api文档。

现在我对String.join()方法很好奇,以便连接/连接字符串。

这种例子让我更好地理解:

//Old way: String str1 = "John"; String str2 = "Doe"; String result = str1 + " " +str2; //or by using str1.concat(str2); //New way: String result = String.join(" ", str1, str2); 

不过,我不明白我应该使用哪一个。 这两个过程之间是否有任何性能或其他差异。

任何帮助将不胜感激。

String.join依赖于String.join类,它本身依赖于内部StringBuilder来构建连接的字符串。

因此,性能方面与使用StringBuilder并附加到它或使用+链(现在由编译器转换为StringBuilder操作)非常相似。

但是String.join的重要性不是作为+String.concat的一般替代,而是作为String.split操作的“反向操作”。 在这种情况下更有意义 – 当你有一堆你希望使用分隔符连接在一起的字符串时 – 而不是替换concat

也就是说,当你在数组或列表中有abcd时,要构建类似"a/b/c/d""(a+b+c+d)"String.joinStringJoiner会使操作清晰可读。

str1 + " " + str2内部转换为:

 StringBuffer tmp1 = new StringBuffer(); tmp1.append(str1); tmp1.append(" "); String tmp2 = tmp1.toString(); StringBuffer tmp3 = new StringBuffer(); tmp3.append(tmp2); tmp3.append(str2); String result = tmp3.toString(); 

str1.concat(str2)不会产生相同的结果,因为两个字符串之间不存在空格。

加入应该相当于

 StringBuffer tmp1 = new StringBuffer(); tmp1.append(str1); tmp1.append(" "); tmp1.append(str2); String result = tmp.toString(); 

因此更快。