0%

关于『怎么判断一个数是奇数』的思考

有时候,关于一个简单的问题,深入思考之后或许能发现更多不一样的东西。那么现在,我们来讨论一个简单的问题:能不能写一个方法,判断一个数是奇数?

可能我们刚看到这个问题,都会不屑的一笑,这么简单的问题,还用得着讨论吗?我觉得是有必要的。

像下面这样,我们很容易就能写出来:

1
2
3
4
5
6
7
public static boolean test(int i) {
if (i % 2 == 1) {
return true;
} else {
return false;
}
}

好像没有问题,那能不能优化一下呢?if判断的不就是boolean值么,好像可以直接返回,然后代码可以改成这样:

1
2
3
public static boolean test(int i) {
return i % 2 == 1;
}

做到这一步好像已经很棒了,一行代码就能实现,那还能不能再优化一下呢?再看看下面的代码:

1
2
3
public static boolean test(int i) {
return (i & 1) == 1;
}

这里巧妙的使用了位运算,以非常优雅简洁的方式解决了这个问题,对于计算机来说,位运算应该是最快的计算方式了。

通过上面对一个简单问题处理的一步步优化,我想说的的是,有时候写代码,解决一个问题,并不是能用就行了,还应当考虑,有没有更高效的方式去做更好的处理,这是值得深思的。写代码的时候如果不思考,写出来的代码将会变得臃肿,可读性也很差。如果你看过Java源码,你一定会对其中的一些代码大声惊呼的,仿佛是在看一件美丽的事物,因为里面众多的方法实现太优雅了。

参考:

记一道简单的java面试题