迷题1:奇数性
取余操作返回一个非零的结果时,它与左操作数具有相同的正负符号.
public static boolean isOdd(int i) {
return (i & 1)!=0;
}
迷题2:找零时刻
在需要精确答案的地方,要避免使用float和double;对于货币计算,要使用int,long或BigDecimal.
一定要使用BigDecimal(String)构造器,而千万不要用BigDecimal(double),后者用他的参数的精确值创建一个实例. 如new BigDecimal(.1),他返回一个BigDecimal,也即0.1000000000000000055511151231257827021181583404541015625,正确使用如下:
import java.math.BigDecimal;
public static void main (String args[ ]){
System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));
}
迷体3:长整除
当你操作很大的数字的时候,千万要提防溢出---它可是个缄默的杀手
迷题4:初级问题
在long类型的字面常量中,一定要使用大写的L千万不要用小写的l,他会和1区分不出来(看的时候出错)
迷题5:十六进制的趣事
十六进制和八进制的字面常量的最高位被置位了,那么他们就是负数,所以通常避免混合类型的计算.
迷题6:多重转型
如果最初的数值类型是有符号的,那么就执行符号扩展;如果它是char,那么不管他将要转换为什么类型,都
执行零扩展
迷题7:互换内容
在单个的表达式中不要对相同的变量赋值两次
迷题8:Dos Equis
混合类型的计算会引起混乱,而这一点在条件表达式中比其他任何地方都表现的显眼,通常最好在条件表达式中
使用相同类型的第二和第三操作数
迷题9:半斤
复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型
short x=0;
int i=123456;
x+=i;会将int转为short