Java數據類型轉換(自動轉換和強制轉換)
數據類型的轉換,分為自動轉換和強制轉換。自動轉換是程序在執行過程中“悄然”進行的轉換,不需要用戶提前聲明,一般是從位數低的類型向位數高的類型轉換;強制類型轉換則必須在代碼中聲明,轉換順序不受限制。
自動數據類型轉換
自動轉換按從低到高的順序轉換。不同類型數據間的優先關係如下:
低--------------------------------------------->高
byte,short,char-> int -> long -> float -> double
運算中,不同類型的數據先轉化為同一類型,然後進行運算,轉換規則如下:
強制數據類型轉換
強制轉換的格式是在需要轉型的數據前加上“( )”,然後在括號內加入需要轉化的數據類型。有的數據經過轉型運算後,精度會丟失,而有的會更加精確,下面的例子可以說明這個問題。
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=45y=56.0
仔細分析上面程序段:由於在34.56 前有一個int 的強制類型轉化,所以34.56 就變成了34。同樣11.2 就變成了11 了,所以x 的結果就是45。在x 前有一個double 類型的強制轉換,所以x 的值變為45.0,而10 的前面也被強製成double 類型,所以也變成10.0,所以最後y 的值變為56。
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 對應十進制中的9。同樣從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 = 1100<10 = 0
但是在Java中不一樣,條件成立返回true,否則返回false,即布爾類型。例如:
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 = true100<10 = false100<10是對的
實際上,true 等同於1,false 等同於0,只不過換了個名稱,並單獨地成為一種數據類型。