1. 程式人生 > >Java中的八大資料型別詳談

Java中的八大資料型別詳談

JAVA中的八大資料型別

Java的基本資料型別在任何作業系統上都具有相同的大小

1.int 取值範圍-231~231-1 型別長度:4個位元組(32位) 預設值:0
2.short 取值範圍 -215~215-1 型別長度:2個位元組(16位)
3.long 型別長度:8個位元組(64位)
4.byte 型別長度:取值範圍:-128~127 1個位元組(8位)
5.float 型別長度:4個位元組(32位)
6.double 型別長度:8個位元組(64位)預設值:0.0
7.boolean:1個位元組(8位)預設值:false
8.char:1個位元組(8位)預設值:\u0000
特殊的資料型別:引用資料型別:陣列 類 介面
String是一個引用資料型別,用來表示字串,用" "表示,在Java中可以使用+連線兩個字串,並且只要使用了+時,也出現了字串,則所有的資料型別(包括引用資料型別)都會變為String.
在Java中,一個整數預設是int型,若要定義為long型,需要在整數後加L(推薦)或l
一個小數預設是若要定義double型,若要定義為float型別,需要在小數後追加F或f
在Java中沒有用0表示false,用非0表示true的概念。

十六進位制型別表示時要以 0x 或 0X 開頭
“A” 與 'A’的區別:前者是字串常量,後者是字元常量,前者比後者需佔用更多位元組。

型別轉換

小型別提升為大型別會自動轉化。
大型別轉換為小型別需要強轉,並且可能會造成資料精度丟失

1.隱式的型別轉換(自動型別轉換)

各個基本型別之間的轉換關係:

1)在整數之間進行型別轉換時,數值不會發生改變.但將int或long型轉換成浮點型時,由於儲存方式不同,int和long包含的位數比float所能表達的位數多,有可能存在資料精度的缺失.

2)char、byte、short 3種類型之間 的轉換

byte b = 1;
char c=1;
short s = 1;

以上情況是一種特例:雖然我們知道1是一個int型的整數,但卻可以直接向資料型別低的轉化,是因為編譯時整型的字面常量賦值給比int型別低的變數型別,而字面常量又沒有超過該變數型別的取值範圍,則可以轉換成功,編譯器可以做隱式型別轉換.這種特例只適用於對變數進行賦值,不適用於方法呼叫語句.
但即使是在取值範圍裡的整型變數賦給byte也需要強制型別轉化。
3)當byte與short或char (或是三者的混合)參與運算時,結果為int型
4)使用符合運算子"+="時,複合運算子在賦值時可以自動將運算結果轉化為左側的運算元型別.
5)byte到char的型別轉換比較特殊:稱為擴充套件收縮轉換
在這裡插入圖片描述

2.複合運算子 的特徵
小資料型別與大資料型別做數值運算時,小資料型別會自動提升為大資料型別,eg:10+1L—>int+long–>long+long
3.強制型別轉換
當取值範圍大的資料型別向取值範圍小的資料型別轉換時有可能會損失精度
eg:byte b=300;


輸出b的值為44;
這是因為編譯器會直接擷取300的二進位制數(‭000100101100‬)的低八位(一位元組byte的儲存位數)再轉換成十進位制數輸出。
當浮點型強制轉換為整型,採用的是"去1法",也就是無條件的捨去小數點的所有數字,不會進行四捨五入計算.

任何型別的資料都可以向String轉換

典型例題

byte b = 3,c = 5;
byte d =b+c;
System.out.println("d"+d);

以上程式編譯不通過,byte b = 3,c = 5;有錯誤,不能這樣定義變數。當兩個數值進行計算時,運算結果至少是int型,若參與運算的兩個數值有一個數值型別比int高,則運算結果與高級別的資料型別相同。

轉義字元:
換行 \n
製表符\t
雙引號"
單引號’
&& 和 || 都是短路運算子,即當只要有條件返回false,&&(短路與)就不再判斷剩餘條件,返回false;只要有條件返回true,||(短路或就不再判斷剩餘條件,返回true)
三目運算子:
資料型別 變數 = 布林表示式?滿足時賦值:不滿足時賦值
eg:

      int a=3;
      int b=4;
      int c=5;
      int ret=a>b?a:(b>c)?b:c

典型例題:
1.存在使i+1<i的數嗎?
答:MAX_VALUE,因為MAX_VALUE+1 == MIN_VALUE.(拓展:MIN_VALUE-1 ==MAX_VALUE)
2.System.out.println(“5”+2);的輸出結果為:52
3.float f=3.5;是錯誤的,因為3.5是double型別比float型別大,需要強轉。
改為:float f=3.5F;