首頁  >  文章  >  Java  >  深入解析Java中的資料型別與變數

深入解析Java中的資料型別與變數

高洛峰
高洛峰原創
2017-01-22 10:28:411284瀏覽

Java資料型別轉換(自動轉換和強制轉換)
資料型別的轉換,分為自動轉換和強制轉換。自動轉換是程式在執行過程中「悄然」進行的轉換,不需要使用者提前聲明,一般是從位數低的類型轉換到位數高的類型;強制類型轉換則必須在程式碼中聲明,轉換順序不受限制。
自動資料型別轉換

自動轉換依從低到高的順序轉換。不同類型資料間的優先關係如下:
    低--------------------------------------- ------>高
    byte,short,char-> int -> 長 -> float -> double

運算中,不同類型的資料先轉換為相同類型,然後運算,轉換規則如下:

深入解析Java中的資料型別與變數

強制資料型別轉換

強制轉換的格式是在需要轉型的資料前加上“( )”,然後在括號內加入需要轉換的資料型別。有的數據經過轉型運算後,精確度會遺失,而有的會更精確,以下的例子可以說明這個問題。

public class Demo {
  public static void main(String[] args){
    int x;
    double y;
    x = (int)34.56 + (int)11.2; // 丢失精度
    y = (double)x + (double)10 + 1; // 提高精度
    System.out.println("x=" + x);
    System.out.println("y=" + y);
  }
}

   

運作結果:

x=45
y=56.0

   

仔細分析上面程式段:由於在 34.56


仔細分析上面程式段:由於在 34.56

仔細分析上面類型:由於在 34.56

同樣 11.2 變成了 11 了,所以 x 的結果就是 45。在 x 前面有一個 double 類型的強制轉換,所以 x 的值變成 45.0,而 10 的前面也被強製成 double 類型,所以也變成 10.0,所以最後 y 的值變成 56。 深入解析Java中的資料型別與變數

Java資料型別以及變數的定義

Java 是一種強型別的語言,宣告變數時必須指明資料型別。變數(variable)的值佔據一定的記憶體空間。不同類型的變數佔據不同的大小。

Java中共有8種基本資料類型,包括4 種整型、2 種浮點型、1 種字元型、1 種布林型,請見下表。

對於整型數據,通常情況下使用 int 型別。但如果表示投放廣島長崎的原子彈釋放出的能量,就需要使用 long 型了。 byte 和 short 類型主要用於特定的應用場合,例如,底層的文件處理或需要控制佔用儲存空間量的大數組。

在Java中,整型資料的長度與平台無關,這就解決了軟體從一個平台移植到另一個平台時給程式設計師帶來的諸多問題。與此相反,C/C++ 整型資料的長度是與平台相關的,程式設計師需要針對不同平台選擇合適的整型,這就可能導致在64位元系統上穩定運行的程式在32位元系統上發生整型溢出。

八進位有一個前綴 0,例如 010 對應十進位中的 8;十六進位有一個前綴 0x,例如 0xCAFE;從 Java 7 開始,可以使用前綴 0b 來表示二進位資料,例如 0b1001 對應十進位中的 99。同樣從 Java 7 開始,可以使用底線來分隔數字,類似英文數字寫法,例如 1_000_000 表示 1,000,000,也就是一百萬。底線只是為了讓程式碼更易讀,編譯器會刪除這些底線。

另外,不像 C/C++,Java 不支援無符號類型(unsigned)。

float 類型有效數字最長為 7 位,有效數字長度包括了整數部分和小數部分。例如:

float x = 223.56F;
float y = 100.00f;

注意:每個float類型後面都有一個標誌“F”或“f”,有這個標誌就代表是float類型。

double 類型有效數字最長為 15 位。與 float 類型一樣,double 後面也帶有標誌“D”或“d”。例如:

double x = 23.45D;
double y = 422.22d;
double z = 562.234;

注意:不帶任何標誌的浮點型數據,系統預設是 double 類型。

大多數情況下都是用 double 類型,float 的精確度很難滿足需求。

不同資料型別舉例:

public class Demo {
  public static void main(String[] args){
    // 字符型
    char webName1 = '微';
    char webName2 = '学';
    char webName3 = '苑';
    System.out.println("网站的名字是:" + webName1 + webName2 + webName3);
     
    // 整型
    short x=22; // 十进制
    int y=022; // 八进制
    long z=0x22L; // 十六进制
    System.out.println("转化成十进制:x = " + x + ", y = " + y + ", z = " + z);
     
    // 浮点型
    float m = 22.45f;
    double n = 10;
    System.out.println("计算乘积:" + m + " * " + n + "=" + m*n);
  }
}

運作結果:

网站的名字是:微学苑
转化成十进制:x = 22, y = 18, z = 34
计算乘积:22.45 * 10.0=224.50000762939453

從運作結果可以看出,即使浮點型資料只有整數沒有小數,在控制台上輸出時系統也會自動加上小數點,且小數位全部置為0。

對布林型的說明

如果你有程式設計經驗,了解布林型,請跳過下面的教程,下面的教程針對只有C語言基礎的讀者(C語言沒有布林型)。

在C語言中,如果判斷條件成立,會回傳1,否則回傳0,例如:

#include <stdio.h>
int main(){
  int x = 100>10;
  int y = 100<10;
  printf("100>10 = %d\n", x);
  printf("100<10 = %d\n", y);
  return 0;
}

運行結果:

100>10 = 1
100<10 = 0

但是在Java中不一樣,條件返回true,否則返回falsetrue,否則返回falsetrue ,即布林類型。例如:

public class Demo {
  public static void main(String[] args){
    // 字符型
    boolean a = 100>10;
    boolean b = 100<10;
    System.out.println("100>10 = " + a);
    System.out.println("100<10 = " + b);
     
    if(a){
      System.out.println("100<10是对的");
    }else{
      System.out.println("100<10是错的");
    }
  }
}

🎜🎜運行結果:🎜
100>10 = true
100<10 = false
100<10是对的
🎜🎜🎜實際上,true 等同於1,false 等同於0,只不過換了個名稱,並單獨地成為一種資料類型。 🎜

更多深入解析Java中的資料類型與變數相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn