Java的8大基本數據類型


Java8大基本數據類型

byte(字節型)、short(短整型)、int (整型) 、long(長整型)、float(單精度浮點型)、double(雙精度浮點型)、boolean(布爾型)、char(字符型)

數值型

整型  

  • Byte數據類型是8位
    取值范圍:(-128 - 127)
    默認值:0
    byte a= 100; byte b = -20;
  • short數據類型是16位
    取值范圍:(-2^15 - 2^15 -1)
    默認值:0
  • int 數據類型是32位
    取值范圍:(-2^31 - 2^31 -1)
    默認值:0
  • long數據類型是64位
    默認值:0L
    long a = 10000L;
    整型常量若要聲明為long類型,需要在數字后加上l或L,
  • 在Java中任何一個整型常量均為int類型

浮點型

  • float數據類型是單精度、32位、符合IEEE754標准的浮點數;
    默認值:0.0f
    float fl = 2.3f;
    若要定義float類型的變量需要在小數后面追加f或者F
  • double數據類型是雙精度、64位、符合IEEE 754標准的浮點數;
    默認值:0.0d
    double d = 2.3;
  • 小數常量默認也是double類型,
    描述整數用int,描述小數用double。
    long一般用於描述日期、時間、內存、文件大小
    IO處理一般使用byte

字符型

  • char
  • 一般用於描述中文(基本忽略)
    取值范圍:(\u0000 - \uffff) —>(0 - 65535);
    字符型用’ '表示;char ch = ‘A’;
    char和int可以相互轉換,char轉int直接賦值,int 轉char強轉。

布爾型

  • boolean
  • 表示一位的信息
    只有兩個取值:true和false
    默認值:false
    boolean flag = true;

對於數據類型的基本類型的取值范圍,不需要強記,因為它們的值都已經以常量的形式定義在對應的包裝類中了。

public class 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);  
    }
}

 

運行結果

基本類型:byte 二進制數8
包裝類:java.lang.Byte
最小值:Byte.MIN_VALUE = -128
最大值: Byte.MAX_VALUE = 127

基本類型:short 二進制位數:16
包裝類:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767

基本類型:int 二進制位數:32
包裝類:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647

基本類型:long 二進制位數:64
包裝類:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807

基本類型:float 二進制位數:32
包裝類:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38

基本類型:double 二進制位數:64
包裝類:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308

基本類型:char 二進制位數:16
包裝類:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535

 

其中Float和Double的最小值和最大值都是以科學計數法的形式輸出的,結尾的“E + 數字"表示E之前的數字要乘以10的多少次方。
eg:1.4E-45 —> 1.4 ✖ 10^(-45)

數據轉換
Java中數據類型轉換必須滿足如下規則:

1.不能對boolean類型進行類型轉換
2.不能把對象類型轉換成不相關類的對象
3.小的數據類型與大的數據類型做數值運算時,小的數據類型會自動提升為大的數據類型。
4.大的數據類型要轉為小的數據類型必須強轉,強轉可能會丟失數據。
5.浮點數到整數的轉換是通過舍棄小數得到,而不是四舍五入

轉換從低級到高級

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

舉例說明:

public class Test{
    public static void main(String[] args){
        int maxValue = Integer.MAX_VALUE;
        int minValue = Integer.MIN_VALUE;
        System.out.println("maxValue = " + maxValue );
        System.out.println("minValue = " + minValue );
        System.out.println("maxValue + 1 = " + (maxValue + 1));
        System.out.println("minValue - 1 = " + (minValue - 1));
    }
}

運行結果:

maxValue = 2147483647
minValue = -2147483648
maxValue + 1 = -2147483648
minValue - 1 = 2147483647

int型存在數據溢出問題,解決方案只有一個:更換數據類型
使用long來解決數據溢出問題:

        int maxValue = Integer.MAX_VALUE;
        int minValue = Integer.MIN_VALUE;
        long max = maxValue + 1L;
        long min = minValue - 1L;

運行結果:

maxValue = 2147483647
minValue = -2147483648
maxValue + 1 = 2147483648
minValue - 1 = -2147483649

因為程序執行順序是從右邊到左邊,所以這里在定義long類型變量時要給運算數字后面加L,不然運算結果還是int型發生溢出。

 

大的數據類型轉為小的數據類型,必須強轉,但有時會丟失內容

       long num = 2147483648L;
       int result  = (int) num;
       System.out.println(result);

運行結果:

-2147483648 

 

關於數據默認值,默認值在主方法中無效

public class Test{
    public static void main(String[] args){
        int num ;//定義一個整型變量但並未初始化
        System.out.println(num);
    }
}

運行結果:

 錯誤: 可能尚未初始化變量num
       System.out.println(num);
                          ^
1 個錯誤

這個時候有兩種解決方案,一種是在使用前進行賦值,另一種是在定義變量時賦值。
各個數據類型的默認值的使用,需要結合類才能觀察到
觀察變量默認值

class InitTest{
    public int a;
}

public class Test{
    public static void main(String[] args){
        InitTest test = new InitTest();
        System.out.println(test.a);
    }
}

 

byte與int
整型常量若是在byte類型的保護范圍之內,可以直接賦值給byte變量,無須強轉;
若整型常量值超出byte范圍必須強轉,以及整型變量無論值是否在byte范圍中都需要強轉。

//10是int,int的范圍大於byte范圍,理論上要進行強轉,可是這里沒有強轉,因為數據在byte范圍內,強轉與不強轉結果一樣。
        byte data = 10;
        System.out.println(data);
        

輸出結果:10

但是int變量賦值給byte類型,必須強轉

byte data = (byte)300;//300的二進制為1 0010 1100,經過強轉后的data只有8位,所以data = 0010 1100 = 44

 

char與int之間的轉換


char c= 'A';
int num = c + 32;//char可以直接轉為int  System.out.println(num);
char x = (char) num;//int 要強轉到char
System.out.println(x);

輸出結果:97  和 a

補充:ASCII碼中65~90為26個大寫英文字母,97~122號為26個小寫英文字母

**注意:**字符型數字(‘0’ - ‘9’)與int數字(0 - 9) 不同

if('0' == 0)一定是false

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM