【发布时间】:2009-12-03 18:47:06
【问题描述】:
我通常通过以下方式在 Java 中创建字符串:
String foo = "123456";
但是,我的讲师坚持要我使用format 方法形成一个字符串,如下所示:
String foo = String.format("%s", 123456);
速度更快。
另外,他说使用 StringBuilder 类更快。
StringBuilder sb = new StringBuilder(); String foo = sb.append(String.format("%s", 123456)).toString();
如果有的话,哪种方法是最快的创建字符串的方法?
它们不可能 100% 准确,因为我可能记不太清了。
【问题讨论】:
-
作为一名学生,如果你能想出一种方法来检验他的理论,那就太好了。你能写一个 Java 类来构造 100000 个字符串/字符串缓冲区等并计时吗?
-
我会告诉你的教授,在现实世界中,非常非常非常小的性能优势远远超过了可读性。此外,应始终首先编写代码以使其尽可能简单易用,然后在需要时进行优化(通常不需要)。
-
在我看来,为了最快的字符串创建而不断地隐藏代码是不值得的。此外,从 java 版本到 java 版本的最快连接方式是什么,至少连接,字符串是最快的,所以升级时你的仔细优化可能会在你的脸上爆炸。我敢肯定,很多非常高效运行的代码都像您的第一个示例一样初始化了它们的字符串,所以我建议您继续以这种方式初始化它们。
-
我 100% 同意开发人员性能(可读性)优于软件性能(微优化)。但是,不管怎样,你的老师错了。通过几个方法调用从一个字符串创建一个新的字符串怎么可能比仅仅引用一个已经在常量池中的字符串实例更快?
-
2 行代码:正在创建 3 个对象(如果我计算正确的话),正在调用 4 个方法,一个自动装箱(+1 对象,+1 方法)并且仍然使用另一个常量字符串
"%s"是比仅使用常量字符串快得多?