在Java中使用String.format而不是字符串串联是更好的做法吗?

2022-08-31 05:00:34

在Java中使用和字符串串联之间是否存在明显的区别?String.format

我倾向于使用,但偶尔会滑倒并使用串联。我想知道一个是否比另一个更好。String.format

我的看法是,在“格式化”字符串方面为您提供了更大的权力;和串联意味着您不必担心意外地放入额外的%s或错过一个。String.format

String.format也更短。

哪一个更具可读性取决于你的头部是如何工作的。


答案 1

我建议使用是更好的做法。主要原因是,使用从资源文件加载的文本可以更轻松地进行本地化,而如果不为每种语言生成具有不同代码的新可执行文件,则无法对串联进行本地化。String.format()String.format()

如果你计划你的应用是可本地化的,你还应该养成为格式标记指定参数位置的习惯:

"Hello %1$s the time is %2$t"

然后可以对其进行本地化,并交换名称和时间令牌,而无需重新编译可执行文件以考虑不同的顺序。使用参数位置,您还可以重复使用相同的参数,而无需将其传递到函数中两次:

String.format("Hello %1$s, your name is %1$s and the time is %2$t", name, time)

答案 2

关于性能:

public static void main(String[] args) throws Exception {      
  long start = System.currentTimeMillis();
  for(int i = 0; i < 1000000; i++){
    String s = "Hi " + i + "; Hi to you " + i*2;
  }
  long end = System.currentTimeMillis();
  System.out.println("Concatenation = " + ((end - start)) + " millisecond") ;

  start = System.currentTimeMillis();
  for(int i = 0; i < 1000000; i++){
    String s = String.format("Hi %s; Hi to you %s",i, + i*2);
  }
  end = System.currentTimeMillis();
  System.out.println("Format = " + ((end - start)) + " millisecond");
}

计时结果如下:

  • 串联 = 265 毫秒
  • 格式 = 4141 毫秒

因此,串联比String.format快得多。