Java基礎資料型別 (Elementary Data Type)

來源:互聯網
上載者:User

標籤:算數   bool   整數   main   aot   equals   print   static   關於   

java有8中資料類型:

資料類型 大小 表示的範圍
boolean 1位元組或4位元組 0或1
byte 1位元組 -128~127
short 2位元組 -32768~32767
char 2位元組 Unicode0~Unicode2^16-1
int 4位元組 -2^31~2^31-1
long 8位元組 -2^63~2^63-1
float 4位元組  
double 8位元組  

 

 

 

 

 

 

 

關於float和double的範圍和精度問題可以參看這篇文章以及這篇文章

 

為什麼boolean的長度既可以是1位元組也可以是4位元組呢?

理由來源是《Java虛擬機器規範》一書中的描述:“雖然定義了boolean這種資料類型,但是只對它提供了非常有限的支援。在Java虛擬機器中沒有任何供boolean值專用的位元組碼指令,Java語言運算式所操作的boolean值,在編譯之後都使用Java虛擬機器中的int資料類型來代替,而boolean數組將會被編碼成Java虛擬機器的byte數組,每個元素boolean元素佔8位”。這樣我們可以得出boolean類型佔了單獨使用是4個位元組,在數組中又是1個位元組。

 

資料類型的轉換:

8種資料類型,我們可以將它們分為3個大類別:整數,浮點數和布爾值。

整數有5種,它們都是按照補碼來編碼的,分別是byte、short、char、int、long五種類型。

浮點數有兩種,float和double。

布爾值就只有boolean一種了。

同一大類別之間的轉換規則其實很簡單。範圍小的可以自動轉換為範圍大。範圍的大小肯定是資料類型的位元有關了。範圍最小的肯定是byte,範圍最大的是long。所以把byte轉化成long,那是一點問題都沒有。可以直接用等號串連起來,也叫做隱式轉換。如果你想將範圍大的轉換為範圍小的,則必須強轉。

下面寫代碼舉例:

public class Main{    public static void main(String[] args) {        byte b1 = 100;        short s1= 200;        int  i1 = 300;        long l1 = 400L;        char ch = ‘a‘;                i1 = b1;        b1 = (byte) i1;        l1 = i1;        i1 = (int) l1;        s1 = (short) ch;        ch = (char) s1;        i1 = ch;        ch = (char) (i1+1);        System.out.println(i1);//輸出97        System.out.println(ch);//輸出b        System.out.println(ch+0);//輸出98    }}

int的是java預設的運算資料類型,定義long類型時資料後面加L。

因為java的運算都是int類型的,所以:

char a= ‘a‘;

char b= a+1;

編譯報錯,必須這樣寫:char b= (char)(a+1);

public class Main{    public static void main(String[] args) {        int  i1 = 300;        long l1 = 400L;                float f1 = 23.7f;        double d1 = 28.99;                f1 = i1;        i1 = (int) f1;                f1 = l1;        l1 = (long) f1;    }}

 

雖然float和int都是4位元組,但是float表示的範圍更大,更廣,所以int到float可以,float到int必須強轉,甚至long到flaot都是強轉。

 

 

不知道大家有沒有這樣的疑問?

int i=1;

flaot f1=1f;

float f2 = 1.0f;

這三個數是否相等呢?

public class Main{    public static void main(String[] args) {        int i=1;                long l = 1;                float f1=1f;        float f2 = 1.0f;                double d1 = 1;        double d2 = 1.0;                //以下輸出全為true        System.out.println(i==f1);        System.out.println(i==f2);        System.out.println(l==f1);        System.out.println(l==f2);        System.out.println(f1==f2);        System.out.println(i==d1);        System.out.println(i==d2);        System.out.println(f1==d1);        System.out.println(f1==d2);    }}

 

補充一點:

public class Main{    public static void main(String[] args) {        String s= "1";        char ch = ‘1‘;        System.out.println(s.equals(ch));        //以下語句報異常,不可將對象和基礎資料型別 (Elementary Data Type)用==比較        System.out.println(s==ch);    }}

 

char和String是沒有可比性了,不可能相等的。當我們去看String的equals()方法原碼時,方法的參數雖然是Object但是,方法內部會判斷Object instanceof String。

 

 

 

 

 

 

 

Java基礎資料型別 (Elementary Data Type)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.