Optimization If语句优化-比较字符串与常量布尔标志
考虑以下Java代码:Optimization If语句优化-比较字符串与常量布尔标志,optimization,if-statement,string-comparison,internals,opcode,Optimization,If Statement,String Comparison,Internals,Opcode,考虑以下Java代码: public void DoStuff(String[] strings, boolean preEval) { final String compareTo = "A Somewhat Long String of Characters"; for ( int i = 0; i < strings.length; ++i ) { if ( preEval ) { if( st
public void DoStuff(String[] strings, boolean preEval)
{
final String compareTo = "A Somewhat Long String of Characters";
for ( int i = 0; i < strings.length; ++i )
{
if ( preEval )
{
if( strings[i].equals(compareTo) )
{
//do something process intensive
}
}
//do something process intensive
}
}
public void DoStuff(String[]strings,boolean preEval)
{
final String compareTo=“有点长的字符串”;
for(int i=0;i
现在请注意if(preEval)
及其内部语句。如果正在使用的算法需要一个条件,例如preEval,那么出于代码优化的目的,包含preEval
条件是否有意义
根据我的理解,计算条件标志是否解析为true或false要比遍历字符集合并将该集合中的每个字符与不同集合中的另一个对应字符进行比较快得多
我对组装的了解大约有30%,我想说的是关于所涉及的内部和操作码/助记符,因此我要问这个问题
更新
注:此处发布的代码与语言无关;我选择Java只是为了一些有形的、易于阅读的东西,以及程序员社区中广为人知的东西。成本较低的方法可能是使用HashSet::contains(string)方法来检查集合中是否存在字符串。在使用字符串的哈希集或字符串键控的哈希映射进行迭代时,您可能可以设计出对字符串比较的需求 我总是尽量使用HashMap来完全避免条件逻辑
_ryan我想说,在大多数情况下,这可能是一种优化 也就是说,您不应该花时间优化尚未度量的代码 例如,在以下情况下,这可能是一个值得优化的而不是:
- 大多数案例都涉及很少的字符串或非常短的字符串
- 在调用函数之前,计算preEval参数需要很长时间
在实际情况下衡量代码,找出瓶颈,然后进行优化。我应该澄清一下,我在Java或任何其他语言中都没有遇到这个问题,这只是我非常好奇的一件事,我相信这可能是一个与语言无关的特性,然而,更依赖于CPU。