我有一个
List<String>list = new ArrayList<>();
我需要添加一些字符串。
我的代码就像这样
final int howMany = 13;
list.add(howMany+"");
就像int不是Serializable我将它传递给String我知道这个String不是池化意味着每次创建一个Object是正确的,因为生成了运行时?
但在我的代码中,代码审阅者将其更改为。
String.valueOf(howMany);
我刚检查了代码,就像
return Integer.toString(i);
结束于。
public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(buf, true);
}
还在创建new String()
。
现在我的问题是哪个代码更适合性能,可读性更好的代码?
howMany + ""
vs String.valueOf(howMany)
我做了一个简单的基准测试String.valueOf()
我认为比较慢......
final long startTime = System.currentTimeMillis();
for(int i=0;i<99900000;i++){
//final String string = i+"";//2637ms..
final String string = String.valueOf(i);//3600ms..
}
final long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime+"ms..");
String.valueOf()
比i + ""
慢50%。
使用J.D.K 1.8.0_121
答案 0 :(得分:2)
String.valueOf()
因以下原因更好:
其他人立即知道你做了什么,因为你的做法与其他人一样。
你正在创建一个额外的字符串,其他代码不是,空字符串:""
需要创建然后(无用地)连接到Java将你的int转换为String。
您的代码也经历了与其他代码或多或少相同的过程,就在幕后--Java基本上有一种算法可以将整数更改为整数的字符串表示。
答案 1 :(得分:1)
嗯,首先想知道为什么你不能使用盒装整数,即整数。毕竟,你已经有了对象而不是该列表中的原始类型...这就是我想要写的东西。另外,正如@MitchWheat建议的那样 - 确保你实际上需要任意Serializable的列表;如果您可以约束列表中的元素类型,通常会更好。
在两个选项之间,您的评论者的建议更可取:
最后,关于你的基准测试结果 - 我能看到什么,Java很奇怪。对于任何不是性能关键部分的内容,我建议对可测量性能的可读性;对于那个 - 无论如何,Java是一个值得怀疑的选择。
答案 2 :(得分:1)
String.valueOf(howMany)
更具可读性,这在我看来很重要。
更重要的是,它也是如此,所以在效率方面它几乎是相同的,我认为最好是可读的。