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
。
也就是说,当你在数组或列表中有a
, b
, c
和d
时,要构建类似"a/b/c/d"
或"(a+b+c+d)"
, String.join
或StringJoiner
会使操作清晰可读。
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();
因此更快。