該書籍PDF下載地址:http://download.csdn.net/download/muyeju/10001473
基本類型有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
所以,若非必要,不要設置隨機數種子