1. 程式人生 > 其它 >Java基礎(5)-Java資料型別

Java基礎(5)-Java資料型別

Java語言是強型別語言,編譯器儲存在變數中的數值具有適當的資料型別,所有的變數都必須先明確定義其資料型別,然後才能使用。Java 中所有的變數、表示式和值都必須有自己的型別,沒有“無型別”變數這樣的概念。

學習任何一種程式語言都要了解其資料型別,幾乎所有的程式語言中都會有資料型別,什麼是資料型別呢?軟體的存在主要是進行資料的處理,現實生活中的資料會有很多,所以程式語言對其進行了分門別類,然後不同的資料型別的資料會給其分配不同大小的空間進行儲存。換句話說,Java中的資料型別作用就是指導Java虛擬機器在程式執行階段到底應該給該變數分配多大的記憶體空間。

一、Java資料型別

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

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

因此,通過定義不同型別的變數,可以在記憶體中儲存整數、小數或者字元。

Java 語言支援的資料型別分為兩種:**基本資料型別(Primitive Type)**和引用資料型別(Reference Type)。

二、Java的基本資料型別

Java語言提供了八種基本資料型別。基本資料型別包括 boolean(布林型)、float(單精度浮點型)、char(字元型)、byte(位元組型)、short(短整型)、int(整型)、long(長整型)和 double (雙精度浮點型)共 8 種。其中:

整數型(不帶小數的數字):byte,short,int,long

浮點型(帶小數的數字):float,double

字元型(文字,單個字元):char

布林型(真和假):boolean

注意:char 代表字元型,實際上字元型也是一種整數型別,相當於無符號整數型別。

型別名稱關鍵字佔用記憶體取值範圍預設值
位元組型 byte 1 位元組 -128~127,(-2^7~2^7-1) 0
短整型 short 2 位元組 -32768~32767,(-2^15~2^15-1) 0
整型 int 4 位元組 -2147483648~2147483647,(-2^31~2^31-1) 0
長整型 long 8 位元組 -9223372036854775808L~9223372036854775807L,(-2^63~2^63-1) 0L
單精度浮點型 float 4 位元組 +/-3.4E+38F(6~7 個有效位) 0.0f
雙精度浮點型 double 8 位元組 +/-1.8E+308 (15 個有效位) 0.0d
字元型 char 2 位元組 ISO 單一字符集 '\u0000'
布林型 boolean 1 位元組 true 或 false false

注意:一個位元組佔8個位。

1.1 位元組型(byte)

byte 型別是最小的整數型別。

byte 資料型別是8位、有符號的,以二進位制補碼錶示的整數;

當用戶從網路或檔案中處理資料流時,或者處理可能與 Java 的其他內建型別不直接相容的未加工的二進位制資料時,該型別非常有用。

1.2 短整型(short)

short 資料型別是 16 位、有符號的以二進位制補碼錶示的整數。

short 型別限制資料的儲存為先高位元組,後低位元組,這樣在某些機器中會出錯,因此該型別很少被使用

1.3 整型(int)

int 型別是最常使用的一種整數型別。

int 資料型別是32位、有符號的以二進位制補碼錶示的整數;

1.4 長整型(long)

long 資料型別是 64 位、有符號的以二進位制補碼錶示的整數;

對於大型程式常會遇到很大的整數,當超出 int 型別所表示的範圍時就要使用 long 型別。

1.5 浮點型別(float和double)

浮點型別是帶有小數部分的資料型別,也叫實型。浮點型資料包括單精度浮點型(float)和雙精度浮點型(double),代表有小數精度要求的數字。

單精度浮點型(float)和雙精度浮點型(double)之間的區別主要是所佔用的記憶體大小不同,float 型別佔用 4 位元組的記憶體空間,double 型別佔用 8 位元組的記憶體空間。雙精度型別 double 比單精度型別 float 具有更高的精度和更大的表示範圍。

Java 預設的浮點型為 double,例如,11.11 和 1.2345 都是 double 型數值。如果要說明一個 float 型別數值,就需要在其後追加字母 f 或 F,如 11.11f 和 1.2345F 都是 float 型別的常數。

例如,可以使用如下方式宣告 float 型別的變數並賦予初值。

float price = 10.2f; // 定義float型別並賦予初值

也可以使用如下的任意一種方式宣告 double 型別的變數並賦予初值。

double price = 11.254d; // 定義double型別的變數並賦予初值
或

double price = 11.254; // 定義double型別的變數並賦予初值

注意:一個值要能被真正看作 float,它必須以 f(或 F)後緩結束;否則,會被當作 double 值。對 double 值來說,d(或 D)後緩是可選的。

1.6 布林型別(boolean)

布林型別(boolean)用於對兩個數值通過邏輯運算,判斷結果是“真”還是“假”。Java 中用保留字 true 和 false 來代表邏輯運算中的“真”和“假”。因此,一個 boolean 型別的變數或表示式只能是取 true 和 false 這兩個值中的一個。

在 Java 語言中,布林型別的值不能轉換成任何資料型別,true 常量不等於 1,而 false 常量也不等於 0。這兩個值只能賦給宣告為 boolean 型別的變數,或者用於布林運算表示式中。

1.7 字元型別

ava 語言中的字元型別(char)使用兩個位元組的 Unicode 編碼表示,它支援世界上所有語言,可以使用單引號字元或者整數對 char 型賦值。

一般計算機語言使用 ASCII 編碼,用一個位元組表示一個字元。ASCII 碼是 Unicode 碼的一個子集,用 Unicode 表示 ASCII 碼時,其高位元組為 0,它是其前 255 個字元。

Unicode 字元通常用十六進位制表示。例如"\u0000"~"\u00ff"表示 ASCII 碼集。"\u"表示轉義字元,它用來表示其後 4 個十六進位制數字是 Unicode 碼。

字元型變數的型別為 char,用來表示單個的字元,例如:

char letter = 'A';
char numChar = '1';

對於數值型別的基本型別的取值範圍,我們無需強制去記憶,因為它們的值都已經以常量的形式定義在對應的包裝類中。

package com.joshua317;

public class Main {

    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

三、Java的引用資料型別

Java的引用資料型別建立在基本資料型別的基礎上,包括陣列、類和介面。引用資料型別就是對一個物件的引用,引用型別變數就是一個指標,指向物件的變數是引用變數,只是 Java 語言裡不再使用指標這個說法。另外,Java 語言中不支援 C++ 中的指標型別、結構型別、聯合型別和列舉型別。

引用型別還有一種特殊的 null 型別。空型別(null 型別)就是 null 值的型別,這種型別沒有名稱。因為 null 型別沒有名稱,所以不可能宣告一個 null 型別的變數或者轉換到 null 型別。空引用(null)是 null 型別變數唯一的值。空引用(null)可以轉換為任何引用型別。在實際開發中,可以忽略 null 型別,假定 null 只是引用型別的一個特殊直接量。

注意:空引用(null)只能被轉換成引用型別,不能轉換成基本型別,因此不要把一個 null 值賦給基本資料型別的變數。