2020-5-8
今天茶足饭饱之余,在知乎上看到了一篇文章《记一道简单的java面试题》 。
题目为:实现一个方法,判断一个整数是否为奇数。
应试者的第一段代码:
public boolean isOdd(int i) {
if (i % 2 == 1) {
return true;
} else {
return false;
}
}
如果应试者真的写出这样的代码,我想应该基本就挂掉了吧。这段代码的问题是应试者没有考虑到输入的整数为负数的情况。例如当输入值为-1,这段代码返回的结果为false,另外既然返回值为布尔类型,就不需要多余的if...else判断语句。代码进而可以优化为:
public boolean isOdd(int i) {
return i % 2 != 0;
}
这样一来,既增加了可读性,也使代码具有鲁棒性。
有没有更好的方法呢?或者说是否可以不通过取模的方式来完成这个函数
奇偶的区别在于最后一位是1还是0,我们只需要位运算操作,就可以将代码简化至:
public boolean isOdd(int i) {
return (i & 1) == 1;
}
最后,在本篇文章中作者指出:
我:“这样是不是比上面取模运算要快?”
候选人:“那当然了,位运算肯定快啊。”
我:“但是我们实际代码测试过,发现上面的按位与操作和取模操作,实际运行的时间是差不多的,为什么呢?”
作者给出的解释:
这其实也解决了我一直以来的疑惑~
网友评论