1. 程式人生 > 其它 >Java資料型別拓展知識

Java資料型別拓展知識

技術標籤:Java基礎java

一、整數

  定義整數型別時,不同進位制數字的寫法不同。

        //整數拓展:進位制  二進位制0b   八進位制0   十進位制    十六進位制0x

        int i = 0b10;  //二進位制0b
        int i2 = 010;  //八進位制0
        int i3 = 10;
        int i4 = 0x10; //十六進位制0x   0~9 , A~F

  將 i,i2,i3,i4 按順序輸出,得到的結果分別為2,8,10,16。

二、浮點數

  計算機在處理浮點數時,是有誤差的。因此在程式中,不要用 ‘==’ 比較浮點數大小,容易出錯。下面舉兩個例子進行說明:

        float f = 0.1f;
        double d = 1.0/10;
        System.out.println(f==d);

  顯然,f = d = 0.1,但是此程式得到的結果為false。

  我們再嘗試將下面兩個浮點數進行比較:

        float f2 = 23131312313131f;
        float f3 = f2+1;

        System.out.println(f2==f3);

  f3 = f2+1,我們可以明顯看出兩數不相等,但是此程式輸出的結果為true。

  由上面兩個例子可知,在Java中,浮點數的運算結果並不精確。

  但我們在使用Java開發的過程中,有時會涉及金額處理的問題,需要進行小數的運算。針對這種情況,我們需要使用BigDecimal數學工具類,該類位於java.maths類包下,可以很好地解決浮點數計算無法精確計算的問題 。

三、字元

  我們對字元進行強制型別轉換,將其轉換為數字。如下所示:

        char c1 = 'a';
        char c2 = '中';

        System.out.println(c1);
        System.out.println((int)c1);  //強制轉換

        System.out.println(c2)
; System.out.println((int)c2); //強制轉換

  最終輸出結果為:a,97,中,20013。

  其中,97和20013其實是字元 ‘a’ 和字元 ‘中’ 所對應的Unicode編碼值。

  Unicode編碼值的範圍是從U0000到UFFFF。
  下面,我們嘗試使用Unicode編碼值,輸出其對應的字元:

        char c3 = '\u0061';
        System.out.println(c3);

  最終輸出結果為 a,即此編碼對應的字元為 ‘a’ 。(注意,0061是十六進位制數,換算成十進位制數為97,也就是上面的例子中,a所對應輸出的整數值。)

  下面,我們簡單介紹兩種常見的轉義字元,空格符以及換行符:

        //轉義字元
        // \t  空格(製表符)
        // \n  換行

        System.out.println("Hello\tWorld");
        System.out.println("Hello\nWorld");

  輸出結果如下所示:
在這裡插入圖片描述

  接下來我們再對比兩種不同的字串定義方式。
  如下所示,我們 new 兩個相同的字串,並將二者進行比較。

        String sa = new String("hello world");
        String sb = new String("hello world");
        System.out.println(sa==sb);

  得到的結果為flase。

  我們換一種方式,直接定義兩個相同的字串,再將二者進行比較。

        String sc = "hello world";
        String sd = "hello world";
        System.out.println(sc==sd);

  得到的結果為true。

  到底是什麼原因,導致了兩種完全不同的比較結果呢?這涉及到了面向物件的問題,需要從記憶體的角度進行分析,這裡先不進行描述,大致瞭解即可。

四、布林值

  我們知道,boolean資料型別的值只有兩種,true和false。有時我們設定了boolean值之後,需要用if語句進行判斷,if語句的寫法有以下兩種:

        boolean flag = true;
        if (flag){}        //一般採用這種寫法
        if (flag==true){}  

  這兩種寫法的含義是一樣的。而我們的程式碼要儘量做到精簡易讀,因此我們一般採用第一種寫法。