1. 程式人生 > 實用技巧 >3. Java 基本資料型別

3. Java 基本資料型別

Java 是一種 強型別 語言,要求變數的使用嚴格規定,所有變數的使用都必須先定義

3.1 基本型別(8)

基本型別分為:數值型別:整型、浮點型、字元型;布林型

  • 整型
    1. byte (1個位元組)
    2. short (2個位元組)
    3. int (4個位元組)
    4. long (8個位元組)
  • 浮點型
    1. float (4個位元組)
    2. double (8個位元組)
  • 字元型
    1. char (2個位元組)
  • 布林型
    1. boolean:true/false (1位)

基本型別的包裝類:

Byte、Short、Integer、Long、Float、Double、Character、Boolean

3.2 引用型別

  • 介面
  • 陣列

3.3 常見面試題

3.3.1 自動拆箱和裝箱

裝箱:將基本資料型別轉換為對應的引用型別;呼叫 valueOf() 方法

拆箱:將引用型別轉換為對應的基本資料型別;呼叫 xxxValue() 方法

相關博文:https://www.cnblogs.com/dolphin0520/p/3780005.html

例子:

Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;

System.out.println(i1 == i2);// true
System.out.println(i3 == i4);// false

解析:
    Integer.valueOf(); 方法 會根據數值判斷,[-128,127] 之間會查詢相同值得引用地址,否則new 一個新的物件
    
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
=========================================================================================================

Double d1 = 100.0;
Double d2 = 100.0;
Double d3 = 200.0;
Double d4 = 200.0;


System.out.println(d1 == d2);// false
System.out.println(d3 == d4);// false

解析:
    double.valueOf  是直接建立新物件
    
    public static Double valueOf(double d) {
        return new Double(d);
    }    

=========================================================================================================
布林值:定義了兩個靜態變數;此會在初始化載入的時候就載入完。
    public static final Boolean TRUE = new Boolean(true);
    public static final Boolean FALSE = new Boolean(false);

    public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }

因此:

整數型 Byte、Short、Integer、Long、Character 、Boolean都是同類模式;常量池技術

  • Byte、Short、Integer、Long 快取資料:[-128, 127]
  • Character : [0, 127]
  • Boolean : [True Flase]
  • ==》 以上超出對應的範圍即會建立新的物件。

浮點型 Double 、Float 直接new.

  • 因為浮點數沒有固定範圍大小的數值

Integer i = new Integer(***); 和 Integer i = *; 的區別

  1. 第一種不會觸發自動裝箱;第二種會
  2. 某種程度上來說,第二種的執行效率要高於第一種;
    • 因為自動裝箱的時候:會判斷區間值,如在區間種則無需new.

進位制

  • 整數進位制首位

    1. 二進位制:0b
    2. 八進位制:0
    3. 十進位制:
    4. 十六進位制:0x
  • 浮點數

    1. float:有限、離散、舍入、大約、接近但不等於
    2. 最好完全不要使用浮點數進行比較
    3. 銀行業務、金錢業務:使用 BigDecimal 數學工具類
  • 字元型

    1. 所有的字元本身還是數字
  • 轉義字元

    1. \t 製表符
    2. \n 換行
    3. ...
  • 布林型

    1. if(flag==true){} 與 if(flag) 是一樣的

3.4 型別轉換

  • 強制轉換:(型別)變數名 ; 由高到低

    int i = 10;
    byte a = (byte) i;
    
  • 自行轉換:由低到高

  • 運算過程中不同型別的資料需轉換為同一型別

  • 注意事項:

    1. 不能對布林型別進行轉換
    2. 高容量轉換為低容量時需強制轉換
    3. 強制轉換存在記憶體溢位的問題
    4. 不能把物件型別轉換為不相干的型別