建议二十一:用偶判断,不用奇判断
判断一个数是奇数还是偶数,应使用:i%2==0?“偶数”:“奇数”
不能使用i%2==1?“奇数”:“偶数”,java在做取余运算时,判断结果是否为1,不是即为偶数,判断负数时会出错。
建议二十二:用整数类型处理货币
计算机中浮点数有可能是不准确的,因为浮点数的存储规则决定。
通常做法是现将运算的值扩大100倍,运算结束后在缩小100倍。
建议二十三:不要让类型默默转换
java先进行运算再进行类型转换,当数值超过数值范围时,数值会变成负数。
建议二十四:边界
数字越界会使检验条件失效。数字越界后会变为负数。
建议二十五:不要让四舍五入亏了一方
根据不同场景,选择舍入的方法,不能简单地选择四舍五入。
建议二十六:提防包装类型的null值
包装对象与拆箱对象之间可以相互转换,但null值不能转换为基本类型,所以包装类型参与运算时要对null值进行检验。
建议二十七:谨慎包装类型的大小比较
包装类型的大小不能用“==”,“<”,“>”比较大小,只能用compareTo
建议二十八:优先使用整形池
public class Client {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int ii = scanner.nextInt();
System.out.println("\n====" + ii + " 的相等判断====");
// 两个通过new产生的Integer对象
Integer i = new Integer(ii);
Integer j = new Integer(ii);
System.out.println("new产生的对象:" + (i==j));
i = ii;
j = ii;
System.out.println("基本类型转换的对象:" + (i==j));
i = Integer.valueOf(ii);
j = Integer.valueOf(ii);
System.out.println("valueOf产生的对象:" + (i==j));
}
}
}
装箱动作是通过valueOf方法实现的,-128到127的数在包装成对象时是直接从IntegerCache中的静态数组cache整形池中获得,地址是相同的。
建议二十九:优先选择基本类型
参数优先考虑基本类型,自动装箱或拆箱时不知道执行地是哪个方法。
建议三十:不要随便设置随机种子
当种子相同时,同一台机器不论运行多少次,随机数是相同的。所以使用随机数时,不要设置种子。