Java交换机vs for循环性能

Java交换机vs for循环性能,java,Java,我正在做这样的事情: 第一种情况: for(int i=0;i注意,与for循环中的“其他代码”相比,调用method1和method2的时间(比如说)i==42在语义上存在差异:在第一个循环中,method1/method2在i==42迭代之前被调用完成所有i==43到i==49迭代的“其他代码”。在第二个循环中,50次循环迭代的所有“其他代码”在第一次调用method1或method2之前完成 除了语义上的差异,这真的不重要。做最可读和可维护的。这可能意味着第一个,但什么是“可读和可维护的”

我正在做这样的事情:

第一种情况:


for(int i=0;i注意,与
for
循环中的“其他代码”相比,调用
method1
method2
的时间(比如说)
i==42
在语义上存在差异:在第一个循环中,
method1
/
method2
i==42
迭代之前被调用完成所有
i==43
i==49
迭代的“其他代码”。在第二个循环中,50次循环迭代的所有“其他代码”在第一次调用
method1
method2
之前完成

除了语义上的差异,这真的不重要。做最可读和可维护的。这可能意味着第一个,但什么是“可读和可维护的”“因人而异。第二个循环头重复循环头两次是很好的:它打开了一扇门,导致错误的原因是更改了三个循环头中的一个,而不是另外两个循环头中的一个或两个


性能:这无关紧要。第一个要求对
开关(myCustomInt)
的求值比第二个高49倍。理论上,这种求值需要花费时间。在实践中,我打赌你很难衡量差异,特别是在HotSpot(Oracle Java运行时)的情况下确定这是一个热点,并积极地对其进行优化。

最好的方法是可读性和可维护性最好的方法。它们的运行时复杂性似乎完全相同。我更喜欢示例1,因为第二种方法是重复的——如果必须更改循环边界,现在必须分两次(或更多次)执行放置。如果
myCustomInt
在循环期间没有更改,则不必每次运行循环时都检查它。因此,这意味着第二个示例将更快。但是,由于,差异将完全不重要。我将按照@TimCastelijns所说的做。感谢您的所有回复!我将使用示例1 which更具可读性。非常感谢!感谢@T.J.Crowder的详细解释。确实,这里的语义差异值得注意。我将使用示例1,该示例更具可读性,并且如果我更改循环边界,则创建未来错误的可能性更小。非常感谢!
for(int i=0; i<50; i++){
        // execute some other code here

        switch(myCustomInt){
            case 1:
            case 2:
            case 3:
                // execude method1
                break;
            case 4: 
                // execute method2
                break;
        }
    }
 for(int i=0; i<50; i++){
        // execute some other code here
    }

  switch(myCustomInt){
        case 1:
        case 2:
        case 3:
            for(int i=0; i<50; i++){
                // execute method1
            }
            break;
        case 4:
            for(int i=0; i<50; i++){
                // execute method2
            }
            break;
    }