该书籍PDF下载地址:
基本类型有8个:byte,short,int,char,long,double,float,boolean
21.用偶判断,不用奇判断
当判断一个数是偶数还是奇数的时候,应该判断是否是偶数。
i%2==0?"偶数":"奇数"
取余的原理:
被除数-被除数/除数*除数
22.货币的值
货币的值一般都是2为小数,如果用浮点类型的话,计算机计算出来的结果可能是不准确的,它只能无限接近某个值,而不能完全精确,这是由浮点数的存储规则决定的。就像十进制里面三分之一不能准确表示,二进制里面五分之一也不能准确表示。
例:10-9.6=0.40000000000000036
解决方法:
1.使用BigDecimal处理
2.使用整形,只要展示时缩小100倍就可以了,及是以分为单位
23.基本类型转换时,使用主动声明方式减少不必要的Bug
Java是先运算,然后进行类型转换。超过了int的最大值时,其值就是负,因为过界了就会从头开始
24.基本类型的边界
对基本类型进行判断的时候,应该注意其边界值,一旦超过边界值,就会使校验条件失效。所以应避免输入或传入的值就行计算,直接用输入或传入的值进行判断
例如:
package deep;import java.util.Scanner;public class Client { // 一个会员拥有产品的最多数量 public static final int LIMIT = 2000; public static void main(String[] args) { // 会员当前拥有的产品数量 int cur = 1000; Scanner input = new Scanner(System.in); System.out.println("请输入需要预定的数量:"); while (input.hasNextInt()) { int order = input.nextInt(); // 当前拥有的与准备订购的产品数量之和 if (order > 0 && order + cur <= LIMIT) { System.out.println("你已成功预定了" + order + "个产品!"); } else { System.out.println("超过限额,预订失败!"); } } }}
当输入的值是2147483647 这个的时候,会发现也预定成功,这个因为数字越界,使检验条件失效
修改:(order > 0 && order <= LIMIT - cur)成这样就行了,应该避免输入(传入)的参数进行计算
25.根据不同的场景,选择不同的舍入模式
RoundingMode的几种舍入模式:
1.RoundingMode.CEILING:向正无穷方向舍入
2.RoundingMode.FLOOR:像负无穷方向舍入
3.RoundingMode.UP:像绝对值最大的方向舍入,舍弃非零即进位
4.RoundingMode.DOWN:像绝对值最小的方向舍入,所有位都舍弃,不存在进位的情况
5.RoundingMode.HALF_UP:最近数字舍入(5舍)
6.RoundingMode.HALF_DOWN:最近数字舍入(5舍)
7.RoundingMode.HALF_EVEN:银行家算法(4舍6入5考虑,5后非0就进1,5后为0看奇偶,5前为偶应舍去,5前为奇要进一)
26.包装类型参与计算时,要做null值校验
例:
27.包装类型的大小比较
包装类的比较不能用==,因为包装类是对象,用==比较的是对象的引用,即地址是否相等。(如果是基本类型,==比较的是它们的值是否相等)
用compareTo()方法比较,相等返回0,大于返回1,小于返回-1
例:
public static void main(String[] args) { Integer i = new Integer(300) ; Integer j = new Integer(-600) ; int k = j.compareTo(i) ; System.out.println(k); //结果:-1 }
28.优先使用整型池
整型池:在IntegerCache类中,存在一个cache静态数组,容纳的是-127到128之间的Integer对象。通过valueOf产生包装对象时,如果int在-128到127之间,则之间从整型池中获得对象,不在该范围类的int类型则通过new生成包装对象。
整型池的存在提高了系统性能,节约了内存空间
通过包装类的valueOf生成包装实例显著提高空间和时间性能
29.基本类型优先使用
因为有包装类时,可能会进行一些拆箱装箱的过程,从而导致出现一些想不到的问题
30.不要随便设置随机种子
随机数和种子之间的关系:
种子不同,产生不同的随机数
种子相同,即使实例不同,也产生相同的随机数
例:
public static void main(String[] args) { Random r = new Random(1000) ; for(int i=1;i<4;i++){ System.out.println("--------"+r.nextInt()); }}
结果始终是:
---------1244746321
--------1060493871---------1826063944所以,若非必要,不要设置随机数种子