为了连接,String我们经常使用StringBuilder而不是String+ String,但我们也可以String.format通过给定的语言环境,格式和参数来返回格式化的字符串.
例子:
使用StringBuilder连接字符串
String concatenateStringWithStringBuilder(String name, String lName, String nick) {
final StringBuilder sb = new StringBuilder("Contact {");
sb.append(", name='").append(name)
.append(", lastName='").append(lName)
.append(", nickName='").append(nick)
.append('}');
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
使用StringFormat连接字符串:
String concatenateStringWithStringFormat(String name, String lName, String nick) {
return String.format("Contact {name=%s, lastName=%s, nickName=%s}", name, lName, nick);
}
Run Code Online (Sandbox Code Playgroud)
在性能方面,String.Format效率如何StringBuilder?哪一个更好地连接字符串,为什么?
UPDATE
我检查了类似的问题,但没有回答我的问题.到目前为止,我已经习惯StringBuilder连接字符串,我应该使用它吗?或者我应该使用String.format?问题是哪个更好,为什么?
在下面的Java 8代码示例中,所有方法都是等效的,除了foo3()之外的所有方法都是编译的.
我怀疑这里涉及的Java编译时泛型有一些更好的点,但它们对我来说似乎并不清楚,而且远非显而易见.
import java.util.function.Function;
public class LambdaTest<T> {
public T foo1(T t) {
Function<T, T> myIdentity = r -> r;
return myIdentity.apply(t);
}
public T foo2(T t) {
Function<T, T> identity = Function.identity();
return identity.apply(t);
}
public T foo3(T t) {
/* XXX Compile error!
* java.lang.Error: Unresolved compilation problem:
* Type mismatch: cannot convert from Object to T
*/
return Function.identity().apply(t);
}
@SuppressWarnings("unchecked")
public T foo4(T t) {
// unchecked conversion from Function<Object, …Run Code Online (Sandbox Code Playgroud)