只是想知道下面两个片段中哪个最有效?
String outStr = inputStr.substring(20);
(或)
String outStr = inputStr.substring(20, inputStr.length());
如果第二个参数不存在,第一个片段是否在内部调用inputStr.length()?
答案 0 :(得分:2)
不完全 - 它调用substring(beginIndex, count)
,其中count
是一个包含字符数的内部字段。 length()
也返回count
,因此它是+1方法调用。几乎一样。
但更喜欢单参数版本 - 阅读更清晰。
答案 1 :(得分:1)
我的建议是在一个循环中运行这些中的每一个并测量它们需要多长时间。
如果一个明显更快,那就去那个。
如果您发现差异可以忽略不计,请优化可读性(第一个)。
测量,不要猜测!这是优化的头号规则。
答案 2 :(得分:0)
第一个代码,在内部调用String.substring(int beginIndex, int endIndex)
。
代码:
public String substring(int beginIndex) {
return substring(beginIndex, count);
}
count
计数是字符串中的字符数。
答案 3 :(得分:0)
如果查找类java.lang.String
的源代码,您可以在JDK安装目录的文件src.zip
中找到它,您将找到这些实现(这是来自JDK 6 update 26) :
public String substring(int beginIndex) {
return substring(beginIndex, count);
}
public int length() {
return count;
}
换句话说,你的第一行代码确实与你的第二行代码几乎完全相同,效率没有任何区别,无论如何都会显而易见。