1. 程式人生 > 其它 >Java之資料型別,變數賦值

Java之資料型別,變數賦值

Java中的基礎資料型別(四類八種):

  1.整數型     byte----使用byte關鍵字來定義byte型變數,可以一次定義多個變數並對其進行賦值,也可以不進行賦值。byte型是整型中所分配的記憶體空間是最少的,只分配1個位元組;取值範圍也是最小的,只在-128和127之間,在使用時一定要注意,以免資料溢位產生錯誤。

    short----short型即短整型,使用short關鍵字來定義short型變數,可以一次定義多個變數並對其進行賦值,也可以不進行賦值。系統給short型分配2個位元組的記憶體,取值範圍也比byte型大了很多,在-32768和32767之間,雖然取值範圍變大,但是還是要注意資料溢位。

    int----int型即整型,使用int關鍵字來定義int型變數,可以一次定義多個變數並對其進行賦值,也可以不進行賦值。int型變數取值範圍很大,在-2147483648和2147483647之間,足夠一般情況下使用,所以是整型變數中應用最廣泛的。

    long----long型即長整型,使用long關鍵字來定義long型變數,可以一次定義多個變數並對其進行賦值,也可以不進行賦值。而在對long型變數賦值時結尾必須加上“L”或者“l”,否則將不被認為是long型。當數值過大,超出int型範圍的時候就使用long型,系統分配給long型變數8個位元組,取值範圍則更大,在-9223372036854775808和9223372036854775807之間。

  2.浮點型     float----float型即單精度浮點型,使用float關鍵字來定義float型變數,可以一次定義多個變數並對其進行賦值,也可以不進行賦值。在對float型進行賦值的時候在結尾必須新增“F”或者“f”,如果不加,系統自動將其定義為double型變數。float型變數的取值範圍在1.4E-45和3.4028235E-38之間。

    double---double型即雙精度浮點型,使用double關鍵字來定義double型變數,可以一次定義多個變數並對其進行賦值,也可以不進行賦值。在給double型賦值時,可以使用字尾“D”或“d”明確表明這是一個double型別資料,但加不加並沒有硬性規定,可以加也可以不加。double型變數的取值範圍在4.9E-324和1.7976931348623157E-308之間。

  3.布林型     boolean(true, false):布林型別又稱邏輯型別,只有兩個值“true”和“false”,分別代表布林邏輯中的“真”和“假”。使用boolean關鍵字宣告布林型別變數,通常被用在流程控制中作為判斷條件。

  4.字元型     char:char型既字元型別,使用char關鍵字進行宣告,用於儲存單個字元,系統分配兩個位元組的記憶體空間。在定義字元型變數時,要用單引號括起來,例如‘s’表示一個字元,且單引號中只能有一個字元,多了就不是字元型別了,而是字串型別,需要用雙引號進行宣告。

  基礎資料型別變數和值全部存到棧,所以不能為空。

Java引用型別:

  所有的類   所有的陣列   所有的介面

補充:Java堆疊:

  棧(stack)與堆(heap)都是Java用來在Ram中存放資料的地方。與C++不同,Java自動管理棧和堆,程式設計師不能直接地設定棧或堆。 棧的優勢是,存取速度比堆要快,僅次於直接位於CPU中的暫存器。但缺點是,存在棧中的資料大小與生存期必須是確定的,缺乏靈活性。另外,棧資料可以共 享。堆的優勢是可以動態地分配記憶體大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的資料。但缺點是,由於要 在執行時動態分配記憶體,存取速度較慢。 

 補充:Java中的運算子優先順序

Java中的變數的賦值:

1.  賦值不能超過資料型別的範圍

public class Test1
{
    public static void main(String[] args){
        //byte的範圍是-128~127
        byte b=200;
    }
}

注:在Java中,給整數變數賦值時,後面的值會先給一個int

2.強制型別轉換:

public class Test1
{
    public static void main(String[] args){
        //可以在值得前面寫一個(byte)讓他強制轉換
        byte b=(byte)200;
        System.out.println(b);
    }
}

強制轉換為byte型別之後,因為200大於了byte型別的最大取值範圍127,所以會在從頭開始,也就是再從byte型別的最小值-128開始數(200-127)位,得出-56。

3.

public class Test1
{
    public static void main(String[] args){
        short s=123;
        int i=50000;
        s=i;
    }
}

將i的值賦給s,型別不相容,int的最大值超過了short的最大的範圍

 4.

public class Test1
{
    public static void main(String[] args){
        long i=888;
        long l=88888888888;
    }
}

88888888888沒有超過long的範圍,為什麼還是會報錯?因為將數字賦給一變數時,首先給他一個int型別,而8888888888超過了int的範圍所以報錯,應該在超出範圍的數字後面加一個l宣告,l不分大小寫。

public class Test1
{
    public static void main(String[] args){
        long i=888;
        long l=88888888888l;
        long k=88888888888L;
    }
}

 5.

public class Test1
{
    public static void main(String[] args){
        float f=12.345;
    }
}

小數變數的值預設為double型,如果需要可以加f進行宣告:float f=12.345f; 。

double沒有問題。

6.

public class Test1
{
    public static void main(String[] args){
        char a=98;
        System.out.println(a);
    }
}

ASCII表:

public class Test1
{
    public static void main(String[] args){
        short s=123;
        char a='a';
        System.out.println(s+a);
    }
}

在這樣的運算中,計算的是它們在ASCII表中的位置的值。

型別轉換優先順序:

char  short  byte  進行運算的時候,預設取值為int

顯式轉換:也叫作強制型別轉換,可能會導致精度丟失,精度由高到低,需要宣告

隱式轉換:精度由低到高,不需要宣告

變數賦值練習:

        /*
        int a = 1, b = 2, c = 3;
        
         等價於
        int a;
        int b;
        int c;
        
        */
        int i = 1, j;
        // 等價於
        int i = 1;
        int j;

        float f1 = 0.1;
        //0.1預設型別為double,應 float f1 = (float)0.1;
        float f2 = 123;
        long l1 = 12345678, l2 = 88888888888;
        //l2的值超過了預設型別int的範圍
        double d1 = 2e20, d2 = 124;
        byte b1 = 1, b2 = 2, b3 = 129;
        //b3的值超過了byte的範圍, 應用b3=(byte)129;
        j = j + 10;
        i = i / 10;
        i = i * 0.1;
        //應用 i = (int)(i * 0.1);
        char c1 = 'a', c2 = 125;
        byte b = b1 - b2;
        //應改為  int b = b1 - b2;  或者   byte b =(byte) b1 - b2; 
        char c = c1 + c2 - 1;
        // int  c = c1 + c2 - 1;  或    char c = (char)(c1 + c2 - 1); 
        float f3 = f1 + f2;
        float f4 = f1 + f2 * 0.1;
        //double f4 = f1 + f2 * 0.1;  或    float f4 =(float)( f1 + f2 * 0.1);
        double d = d1 * i + j;
        float f = d1 * 5 + d2;
        //同上
        int a, b, c;
        a = 2;
        b = 'q';
        c = 4;
        char d = '5';
        byte e;
        e = a + b;
        //e =(byte) a + b; 
        boolean f = true;
        double g = 4.3;
        g += b;
        b += 0.3;
        b = b + 0.3;
        //b =(int) b + 0.3;
        c += f ? 2 : 4;
        float h = 12.5;
        //float h =(float) 12.5;
        float i = 14.5;
        //同上
        e = h + i;
        e += h;
        a += 2147483646;
        float j = h / 0.5;
        //float  j =(float) h / 0.5;