你使用的法典(我是在类似情况下使用的)的倒数部分是,它似乎只是一个小的cl,理论上产生至少两条临时str子,被立即抛弃。 还有一个问题,即如果你的扼杀时间少于两个特点,会发生什么。
背后是,你不提这些临时扼杀物(使其可以由密码汇编者或JIT最佳化者优化),你的意图对今后的任何法典维护者都是明确的。
如果你需要做其中的数百万次(和<>em>)发现一个明显的业绩问题,我将对业绩表示担忧,并希望澄清。 我也把它埋在某个地方的公用事业中。 另见jambjo在对另一个答复的答复中指出,在<代码>String#to LowerCase和<编码>之间有着重要的差别。 (Edit:答案,因此评论已经删除。 基本上,与当地和统法协会以及使用<代码>String#toLowerCase的docs建议有关,没有<编码>Character.toLowerCase;。
<><>Edit>/strong> 由于我身处ir脏的 mo,我认为我看一看,在简单测试中业绩是否有可衡量的差异。 有。 这可能是因为地方差异(例如, app子和 or):
public class Uncap
{
public static final void main(String[] params)
{
String s;
String s2;
long start;
long end;
int counter;
// Warm up
s = "Testing";
start = System.currentTimeMillis();
for (counter = 1000000; counter > 0; --counter)
{
s2 = uncap1(s);
s2 = uncap2(s);
s2 = uncap3(s);
}
// Test v2
start = System.currentTimeMillis();
for (counter = 1000000; counter > 0; --counter)
{
s2 = uncap2(s);
}
end = System.currentTimeMillis();
System.out.println("2: " + (end - start));
// Test v1
start = System.currentTimeMillis();
for (counter = 1000000; counter > 0; --counter)
{
s2 = uncap1(s);
}
end = System.currentTimeMillis();
System.out.println("1: " + (end - start));
// Test v3
start = System.currentTimeMillis();
for (counter = 1000000; counter > 0; --counter)
{
s2 = uncap3(s);
}
end = System.currentTimeMillis();
System.out.println("3: " + (end - start));
System.exit(0);
}
// The simple, direct version; also allows the library to handle
// locales and Unicode correctly
private static final String uncap1(String s)
{
return s.substring(0,1).toLowerCase() + s.substring(1);
}
// This will *not* handle locales and unicode correctly
private static final String uncap2(String s)
{
return Character.toLowerCase(s.charAt(0)) + s.substring(1);
}
// This will *not* handle locales and unicode correctly
private static final String uncap3(String s)
{
StringBuffer sb;
sb = new StringBuffer(s);
sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
return sb.toString();
}
}
我在各种测试中混淆了这一命令(将其环绕并重整),以避免时间过长的问题(并试图在最初的任何时候强迫某些人)。 Very unscientific, but uncap1
. 始终低于uncap2
和uncap3
40%。 不是这样,我们再谈论一下英特尔原子加工商的100万个频率中的400米。
因此:我看一看你简单、直截了当的代码,总结为一个实用功能。