3 回答
TA贡献1830条经验 获得超9个赞
这不仅是一个可怕的想法,它甚至不是一个可怕想法的良好实现!老把戏是:
a^=b;
b^=a;
a^=b;
那个不会有不足/溢出的问题,并且真的会让你的同事更加困惑。我的意思是,如果你要去混乱,表现不佳的代码...一路走来!
顺便说一句,我通常会说,如果你认为你可能会从以稍微不那么明显的方式做某事中获得一些性能优势,那就永远不要这样做。首先,你可能错了,你的解决方案并不快。其次,Java已经非常快了,这可能并不重要。第三,随着时间的推移,java将改进“明显”的方式,并使用运行时编译器使它们更快。它不会改善你的黑客攻击,甚至可能使它变慢。
如果你不相信我,你可能仍然相信每次连接两个字符串时都应该使用stringbuilder......
TA贡献2019条经验 获得超9个赞
public class SwapTest {
int firstNum = 10;
int secondNum = 20;
public static void main(String args[])
{
SwapTest swap2Numbers = new SwapTest();
long before = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
swap2Numbers.proceedNoInterimVariable();
}
System.out.println(" no temp variable took " + (System.currentTimeMillis()-before));
before = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
swap2Numbers.proceedWithInterimVariable();
}
System.out.println("with temp variable took " + (System.currentTimeMillis()-before));
}
private void proceedNoInterimVariable()
{
firstNum = firstNum + secondNum;
secondNum = firstNum - secondNum;
firstNum = firstNum - secondNum;
}
private void proceedWithInterimVariable()
{
int temp = firstNum;
firstNum = secondNum;
secondNum = temp;
}
}
从我的系统上,临时变量版本的性能要快得多。
no temp variable took 11
with temp variable took 4
添加回答
举报