小编gb9*_*b96的帖子

String.format和StringBuilder之间的性能

为了连接,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 stringbuilder string.format

15
推荐指数
3
解决办法
2万
查看次数

尝试在泛型类中应用lambda表达式时输入不匹配编译错误

在下面的Java 8代码示例中,所有方法都是等效的,除了foo3()之外的所有方法都是编译的.

  1. 为什么foo2()编译但foo3()产生编译错误(详见代码注释)?
  2. 为什么javac不允许在foo3中从Object到T的未经检查的强制转换,但是允许在foo4()中从Function <Object,Object>到Function <T,T>的未经检查的强制转换?
  3. 在编译的4种方法中,哪一种最好?

我怀疑这里涉及的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)

java generics java-8

2
推荐指数
1
解决办法
1341
查看次数

标签 统计

java ×2

generics ×1

java-8 ×1

string.format ×1

stringbuilder ×1