【发布时间】:2016-01-27 23:37:58
【问题描述】:
有几个人告诉我,这样的事情超级懒惰:
int val = 5;
System.out.println("" + val);
String myStr = "" + val;
为什么这比 String.valueOf(val) 更好?它不是在做同样的事情吗?
【问题讨论】:
-
不比
String.valueOf(int)好;更糟,而且很懒。
有几个人告诉我,这样的事情超级懒惰:
int val = 5;
System.out.println("" + val);
String myStr = "" + val;
为什么这比 String.valueOf(val) 更好?它不是在做同样的事情吗?
【问题讨论】:
String.valueOf(int)好;更糟,而且很懒。
它并不是真的“更好”,只是更短,更容易阅读和输入。 (实际上)没有其他区别,即使真正的纯粹主义者可能会说,这实际上更糟,因为(至少,在没有优化的情况下),这会创建一个中间 StringBuilder 对象,然后附加转换为字符串之前的一个字符,因此,这可能比.valueOf 花费更多的滴答声。
【讨论】:
来自JLS:
实现可以选择在一个步骤中执行转换和连接,以避免创建然后丢弃中间字符串对象。为了提高重复字符串连接的性能,Java 编译器可以使用 StringBuffer 类或类似技术来减少通过计算表达式创建的中间 String 对象的数量。
对于原始类型,实现还可以通过将原始类型直接转换为字符串来优化包装对象的创建。
【讨论】: