使用String和使用String之间有明显的区别吗?格式和字符串连接在Java?
我倾向于使用String。格式,但偶尔会滑倒和使用连接。我想知道哪个比哪个好。
在我看来,String。Format让你在“格式化”字符串时更强大;连接意味着您不必担心不小心输入了额外的%s或遗漏了一个。
字符串。格式也更短。
哪一个更容易读,取决于你的大脑如何工作。
使用String和使用String之间有明显的区别吗?格式和字符串连接在Java?
我倾向于使用String。格式,但偶尔会滑倒和使用连接。我想知道哪个比哪个好。
在我看来,String。Format让你在“格式化”字符串时更强大;连接意味着您不必担心不小心输入了额外的%s或遗漏了一个。
字符串。格式也更短。
哪一个更容易读,取决于你的大脑如何工作。
当前回答
性能:
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快得多。
其他回答
String.format()不仅仅是连接字符串。例如,可以使用String.format()显示特定地区的数字。
然而,如果你不关心本地化,就没有功能上的区别。 也许这个连接比另一个快,但在大多数情况下,它可以忽略不计。
It takes a little time to get used to String.Format, but it's worth it in most cases. In the world of NRA (never repeat anything) it's extremely useful to keep your tokenized messages (logging or user) in a Constant library (I prefer what amounts to a static class) and call them as necessary with String.Format regardless of whether you are localizing or not. Trying to use such a library with a concatenation method is harder to read, troubleshoot, proofread, and manage with any any approach that requires concatenation. Replacement is an option, but I doubt it's performant. After years of use, my biggest problem with String.Format is the length of the call is inconveniently long when I'm passing it into another function (like Msg), but that's easy to get around with a custom function to serve as an alias.
性能:
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快得多。
可能会有明显的差别。
字符串。Format相当复杂,在底层使用正则表达式,所以不要习惯在任何地方使用它,只在需要它的地方使用。
StringBuilder会快一个数量级(这里有人已经指出了)。
你不能比较字符串连接和字符串。格式由上面的程序。
你也可以尝试交换使用你的字符串的位置。格式和连接在你的代码块如下所示
public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
for( int i=0;i<1000000; i++){
String s = String.format( "Hi %s; Hi to you %s",i, + i*2);
}
long end = System.currentTimeMillis();
System.out.println("Format = " + ((end - start)) + " millisecond");
start = System.currentTimeMillis();
for( int i=0;i<1000000; i++){
String s = "Hi " + i + "; Hi to you " + i*2;
}
end = System.currentTimeMillis();
System.out.println("Concatenation = " + ((end - start)) + " millisecond") ;
}
您会惊讶地发现,Format在这里工作得更快。这是因为创建的初始对象可能不会被释放,内存分配可能会出现问题,从而影响性能。