Java數據類型之淺析Java基本類型
爲了使得我們比較詳細的瞭解,首先了解兩個定義:
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。數據結構具體指同一類數據元素中,各元素之間的相互關係,包括三個組成成分,數據的邏輯結構,數據的存儲結構和數據運算結構。
數據類型在數據結構中的定義是一組性質相同的值的集合以及定義在這個值集合上的一組操作的總稱。
1.計算機存儲單位的換算
在計算機中,最小的存儲單位是:位(bit),存放一位二進制數,即 0 或 1,英文縮寫b(注意是小寫)。其次是:字節(byte),8個二進制位爲一個字節,英文縮寫B(注意是大寫),另外還有:KB、MB、GB、TB等等。
類型 | 大小 |
---|---|
1B | 8 bit |
1 KB | 1024B |
1MB | 1024 KB |
1 GB | 1024 MB |
1 TB | 1024 GB |
2.Java中數據類型的分類
在Java中,數據類型總體上分爲兩大類。一是基本數據類型,共8種,基本數據類型的變量存儲的是數據值本身;二是引用數據類型,引用數據類型的變量存儲的是保存數據的內存空間地址。其中基本數據類型主要包含4種整數類型、2種浮點數類型、字符型、布爾型。而除了基本類型以外的其他類型都可以是引用類型。
Java之所以設計基本數據類型是因爲在進行程序設計時需要頻繁使用到它們,而new創建對象(特別是小的、簡單的變量)並不是非常有效,因爲new將對象置於“堆”裏。所以在Java中不用new創建變量,而是創建一個並非句柄的“自動”變量。這個變量容納了具體的值,並置於堆棧中,能夠高效的存取(摘自《Java編程思想》),簡言之,就是基本類型的變量存在棧中,而new出來的對象存在堆中。
Java1.1增加了兩個類,用於高精度計算:BigInteger(支持任意精度整數)和BigDecimal(支持任意精度的小數)。
3.基本數據類型的大小及範圍
類型 | 大小 | 範圍 | 默認值 |
---|---|---|---|
boolean | 1位 | false/true | false |
byte | 1個字節(8位) | -128~127 | 0 |
short | 2個字節 | -32768~32767 | 0 |
int | 4個字節 | -2^31 ~ 2^31-1 | 0 |
char | 2個字節 | 可指定、可動態分配 | \u0000 |
long | 8個字節 | -2^63 ~ 2^63-1 | 0 |
float | 4個字節 | -2^31 ~ 2^31-1 | 0.0 |
double | 8個字節 | -2^63 ~ 2^63-1 | 0.0 |
整數字面量默認都爲 int 類型,所以在定義的 long 型數據後面加 L或 l。
浮點數字面量默認都爲 double 類型,所以在定義的 float 型數據後面加F 或 f;double 類型可不寫後綴,但在小數計算中一定要寫 D 或 X.X
另外,在Java中,布爾類型(boolean)的值爲常量,即true或者false。要區別於C語言,不能使用0或者1之類的數字表示真假。
4.Java數據類型轉換
在java中,類型轉換一般分爲自動轉換和強制類型轉換, 首先要強調boolean類型與所有其他7種類型都不能進行轉換。
- 自動轉換:char與byte、short類型因值的範圍不同,不能自動轉換。 byte、short、int類型的數據參數運算時,都將會轉換爲int類型,並且結果也是int(自動向上轉型);char類型向更高長度類型(例如整型)轉換時,會轉換爲對應的ASCII碼值,再做其他類型的自動轉換;如果有浮點數參與運算,除非有特殊聲明,否則都會轉成最大的類型參與運算。
例如:2個操作數(包括byte,short,char,int),都將會轉換爲int類型,並且結果也是int(自動向上轉型)
int num = 10;
double b = 10.01;
double c = num + b;//在運算時,會將num的類型轉換成double類型。
System.out.println(c);
- 強制轉換:
高轉低會導致精度丟失,不同類型的強制轉換,可能會導致精度的下降。
int i=99;
char c=(char)i; //強制類型轉換
System.out.println(c);
byte t = 127;//會報錯。
byte b = (byte)127;不會報錯