考虑以下方法:
private static long maskAndNegate(long l) {
int numberOfLeadingZeros = Long.numberOfLeadingZeros(l)
long mask = CustomBitSet.masks[numberOfLeadingZeros];
long result = (~l) & mask;
return result;
}
该方法可以简写为:
private static long maskAndNegate(long l) {
return (~l) & CustomBitSet.masks[Long.numberOfLeadingZeros(l)];
}
这两种表示在实际运行时是否相等?换句话说,Java 编译器是否优化了我为可读性和调试而放置的额外变量的不必要定义?