【发布时间】:2013-05-09 12:58:09
【问题描述】:
我相信这可能是premature optimization 问题或其他问题。
对于下面两个代码sn-ps,
public void doSomething1(final int a) {
final int b = a -1;
doSomethingElse(b);
doSomethingElse(b);
}
public void doSomething2(final int a) {
doSomethingElse(a - 1);
doSomethingElse(a - 1);
}
doSomething1 是否优于 doSomething2? doSomething2 是否使用了两个不同的 ints?
更新
也许我应该投反对票。但是我有一个实际的代码,它可以像这样读取和写入可变长度位(不是字节)。
final int unsignedLength = length - 1;
return (((readBoolean() ? ~0 : 0) << (length - 1))
| readUnsignedInt(length - 1));
我只是好奇将(length - 1) 部分更改为unsignedLength。
谢谢。
【问题讨论】:
-
您是在问
doSomething1是否比doSomething2更好,还是在陈述并要求解释? -
其实我想知道哪个更可取。谢谢。
-
如果
b的计算比较复杂,你应该使用doSomething1。否则编译器很可能会小心处理。您应该使用在特定情况下更容易维护的东西。 -
您能否解释一下您所说的“更好”是什么意思?如果你说的是内存分配,那么第二种方法更好,因为没有像第一种方法
final int b那样的额外变量。这两种方法的执行时间通常应该相同。
标签: java