1. 程式人生 > 實用技巧 >Java基礎(03)--基本資料型別

Java基礎(03)--基本資料型別

Java基礎(03)--基本資料型別

變數就是申請記憶體來儲存值。也就是說,當建立變數的時候,需要在記憶體中申請空間。

記憶體管理系統根據變數的型別為變數分配儲存空間,分配的空間只能用來儲存該型別資料。

Java 的兩大資料型別:

  • 內建資料型別
  • 引用資料型別

內建資料型別

Java語言提供了八種基本型別。六種數字型別(四個整數型,兩個浮點型),一種字元型別,還有一種布林型。

類別 資料型別 值範圍 預設值 備註
整型 byte -2^7 ~ 2^7 (1byte) 0
short -2^15 ~ 2^15-1 (2byte) 0
int -2^31 ~ 2^31-1 (4byte) 0 一般地整型變數預設為 int 型別
long -2^63 ~ 2^63-1 (8byte) 0
浮點型 float 4byte 0.0f 浮點數不能用來表示精確的值,如貨幣
double 8byte 0.0d 浮點數的預設型別為double型別
double型別同樣不能表示精確的值
布林型 boolean true false false boolean資料型別表示一位的資訊
char 最小值是 \u0000(即為0)
最大值是 \uffff(即為65,535)
char型別是一個單一的 16 位 Unicode 字元
public class base.PrimitiveTypeTest {
    public static void main(String[] args){
        // byte
        System.out.println("基本型別:byte 二進位制位數" + Byte.SIZE);
        System.out.println("包裝類:java.lang.Byte");
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
        System.out.println("----------------------------------");

        // short
        System.out.println("基本型別:short 二進位制位數:" + Short.SIZE);
        System.out.println("包裝類:java.lang.Short");
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
        System.out.println();

        // int
        System.out.println("基本型別:int 二進位制位數:" + Integer.SIZE);
        System.out.println("包裝類:java.lang.Integer");
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
        System.out.println();

        // long
        System.out.println("基本型別:long 二進位制位數:" + Long.SIZE);
        System.out.println("包裝類:java.lang.Long");
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
        System.out.println();

        // float
        System.out.println("基本型別:float 二進位制位數:" + Float.SIZE);
        System.out.println("包裝類:java.lang.Float");
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
        System.out.println();

        // double
        System.out.println("基本型別:double 二進位制位數:" + Double.SIZE);
        System.out.println("包裝類:java.lang.Double");
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
        System.out.println();

        // char
        System.out.println("基本型別:char 二進位制位數:" + Character.SIZE);
        System.out.println("包裝類:java.lang.Character");
        // 以數值形式而不是字元形式將Character.MIN_VALUE輸出到控制檯
        System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE);
        // 以數值形式而不是字元形式將Character.MAX_VALUE輸出到控制檯
        System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE);
    }
}

擴充套件介紹

public class base.Demo {
    public static void main(String[] args) {
        /*
         * 整數擴充套件
         * 進位制:
         *   二進位制 0b
         *   八進位制 0
         *   十進位制
         *   十六進位制 0x  0~9 a~f(10~16)
         * */
        int i1 = 0b101;
        int i2 = 0107;
        int i3 = 10;
        int i4 = 0x10a;

        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println(i4);
        System.out.println("==========================================================");

        /*
        * 浮點數擴充套件
        * float double 特點: 有限、離散、舍入誤差
        * 應避免使用浮點數進行比較
        *  */
        float f = 0.1f;
        double d = 1.0;
        d = d / 10;

        System.out.println(f==d);  // false
        System.out.println(f);
        System.out.println(d);

        float f2 = 2231131542346465326f;
        float f3 = f2 + 1;
        System.out.println(f2==f3);  // true

        /*
        * 字元擴充套件
        * 所有的字元本質上是整數
        * 編碼表 Unicode表 2Byte 0~65536, 字元與數字的對映關係
        * */
        char c1 = 'a';
        char c2 = '中';

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

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

        /*
        * 轉義字元
        * \t 製表符
        * \n 換行
        * */
        System.out.println("=======================================================");
        System.out.println("\\n");
        System.out.println("base.Hello\tWorld!");

    }
}

引用資料型別

  • 在Java中,引用型別的變數非常類似於C/C++的指標。引用型別指向一個物件,指向物件的變數是引用變數。這些變數在宣告時被指定為一個特定的型別,比如 base.Employee、base.Puppy 等。變數一旦聲明後,型別就不能被改變了。
  • 物件、陣列都是引用資料型別。
  • 所有引用型別的預設值都是null。
  • 一個引用變數可以用來引用任何與之相容的型別。
Site site = new Site('wukong');

Java常量

常量在程式執行時是不能被修改的。

Java 中使用final關鍵字來修飾常量,宣告方式和變數類似:

final double PI = 3.1415926;

型別轉換

整型、實型(常量)、字元型資料可以混合運算。運算中,不同型別的資料先轉化為同一型別,然後進行運算。

轉換從低階到高階。

// 低  ------------------------------------>  高
byte,short,char—> int —> long—> float —> double 

資料型別轉換必須滿足如下規則:

  • 不能對boolean型別進行型別轉換。

  • 不能把物件型別轉換成不相關類的物件。

  • 在把容量大的型別轉換為容量小的型別時必須使用強制型別轉換。

  • 轉換過程中可能導致溢位或損失精度,例如:

    int i = 128;
    byte b = (byte) i;
    
  • 浮點數到整數的轉換是通過捨棄小數得到,而不是四捨五入,例如:

    (int) 23.7 == 23;
    (int) -45.89f == -45;
    

自動型別轉換

必須滿足轉換前的資料型別的位數要低於轉換後的資料型別,例如: short資料型別的位數為16位,就可以自動轉換位數為32的int型別,同樣float資料型別的位數為32,可以自動轉換為64位的double型別。

public class base.Demo2 {
    public static void main(String[] args){
        char c1 = 'a';  // 字元 a ,查 ASCII 碼錶可知對應的 int 型別值為 97
        int i1 = c1;
        System.out.println("char自動型別轉換為int後的值等於" + i1);
        char c2 = 'A';  //  A 對應值為 65
        int i2 = c2 + 1;
        System.out.println("char型別和int計算後的值等於" + i2);
    }
}

強制型別轉換

  • 條件是轉換的資料型別必須是相容的
  • 格式:(type)value type是要強制型別轉換後的資料型別
public class base.Demo3 {
    public static void main(String[] args) {
        int i1 = 123;
        byte b1 = (byte)i1;
        System.out.println("int強制型別轉換為byte後的值等於" + b1);  // 123
        int i2 = 129;
        byte b2 = (byte)i2;
        System.out.println("int強制型別轉換為byte後的值等於" + b2);  // -127 強制型別轉換後,精度丟失
    }
}

隱含強制型別轉換

  • 整數的預設型別是 int
  • 浮點型不存在這種情況,因為在定義 float 型別時必須在數字後面跟上 F 或者 f, 浮點型預設型別是double