来自 科技 1970-01-01 08:00 的文章


本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只有当反复确认能力不行才会下结论,相反,如果候选人给我的印象不错,我也会从多个角度来衡量,以免招进会说但不会干活的“大忽悠”。


总的来说在这行做过新人也做过老带新,自己平时也比较喜欢钻研技术所以刚刚入这行的时候老师傅对我还是不错的。

自从当上了主程之后不仅自己写代码也要对hr招的人施行种种考验,毕竟只有招到合格的同事才不至于在工作中拖后腿。

在工作之余和其他合作过公司的人事聊天中突然就聊到那么一个话题。

对方说有一次有一个刚刚毕业的程序来面试,经理就给了一个很容易的题“给你一个随机数怎么判断是奇数还是偶数”?


来面试的人毫不犹豫地就写下了代码:


public static boolean isOdd(int numb) {


return numb%2==1;

}


经理看到这几行代码就他走了。

其实这几行代码看起来是没有什么问题的,正常来讲被2整除余数为1的整数就是奇数,所以在逻辑上看是没有问题的。

可是在java中,上面的这段程序有一半的机会是运行出错的,导致得不到想要的结果。你能想出来是为什么吗?

因为在java中int有一半的数是负数。如果你填-100或者-101会得到什么结果?

取余操作符在运算表达试中,其运算结果的符号同左操作数的正负结果相同,所以如果i是负奇数,则此表达式的结果会是-1,而不是1。

这是很多新手爱犯的错误。

那么该如何改进这段程序呢?

可以修改成numb%2!=0,

完整表达为

public static boolean isOdd(int numb) {


return numb%2!=0;

}

如果要追求效率还可以这样改进

public static boolean isOdd(int numb) {


return (numb&1)!=0;

}


在不然也可以这样



public static boolean isOdd(int numb) {


return (numb&1)==1;

}

教大家写三种的正确方法

大家可要记住这个坑喔!

你让你同事写写看要不他也会犯这个错。


热门文章