最近在看Java的一些知識,隨手寫寫~如有不足或錯誤,歡迎大神指出~
一,基本類型
Java的數據類型可分為基本類型和引用類型,此處只討論基本類型。
Java的基本數據類型和C語言比較相似,主要可以分為四類八種,有整數類型(byte,short,int,long)、浮點類型(float,double),字符型(char),布爾類型(boolean)。Java當中的整數類型都是帶符號的,從負數到正數,沒有unsigned。Java的跨平臺性在于其數據類型有固定的字段長度和表述范圍,不受系統和平臺的影響。比如C語言的整數類型在編譯完成后放在Linux系統當中可能會由于數據太大而出現數據溢出,而Java則不會。
byte
byte是Java中最小的整數類型,占一個字節,8位。也就是說一個byte的數據容量為-128~127,超過此區間的所有賦值操作對于byte來說都是無效的,編譯時是無法通過的,例如byte b = 300,編譯器就會報錯。還有一點,Java當中整數的默認類型都為int,而浮點類型為double,比如123,默認為int,1.23默認為double。
short
short占2個字節,16位。即一個short的數據容量為-2^15~2^15-1,short在Java中比較少見,因為它的地位比較尷尬,小數據可以用byte,超過byte則基本都有int類型解決。
int
int占4個字節,32位,即一個int的表數范圍為 -2^31~2^31-1,上文提到Java當中整數類型默認都為int類型,比如int i = 666,或者long l = 888888888,注意,雖然你聲明了long類型,但如果不在數據后加L或者l時,編譯器也會默認為是int類型而出現編譯錯誤,所以正確的表達式為long l = 888888888L;
long
long占8個字節,64位,即一個long類型數據的表數范圍為 -2^63~2^63-1,一般情況如果數據較大,超出int表數范圍,則使用long類型。
float
float占4個字節,32位,表數范圍-3.403E38~3.4.3E38,非常大,可以不用精確記憶,當然,精度要求不高的時候可以使用float,精度要求高時使用double。定義一個float時比如,float f = 12.3f,必須在后邊加f聲明,否則編譯器會默認為是double而報錯。
double
double占用8個字節,64位,表述范圍-1.798E308~1.798E308,,10的308次方個0,好大- -,數0都要數半天,非常精確了。
char
char屬于字符類型,屬于數據類型的原因是Java中char采用Unicode統一編碼(全球語言統一編碼),全世界所有的語言都可以使用char表達出來,例如char aChar = ‘A’;、char bChar = ‘中’;,每個字符占用2個字節,所以char類型可用16進制表達出來,如char cChar = '\u0016';
boolean
布爾類型,在Java當中只有true和false,沒有0和1,一般用于條件判斷。
二,類型轉換
在使用數據的過程中經常需要定義各類變量,而他們的類型通常又是各不相同的,所以在進行運算或調用的過程中需要進行類型轉換,而轉換所遵循的依據則分為兩種,一種是自動轉換,顧名思義由編譯器完成;另一種是強制轉換,在數據前加轉換符(typed)完成。 boolean類型不參與轉換。
容量小的轉換為容量大的數據時自動轉換,轉換時遵循大小順序為:byte/short/chart->int->long->float->double
比如 int i; byte b = 120; i = b;此時將byte b 轉換為int i 時,由于是大容器裝小數字,所以編譯會自動轉換且不會損失精度;long l = 456745L;float f; f = l;(此處看到有些地方說會出現精度損失,比如long->float,不太明白)。
容量大的轉換為容量小的數據時強制轉換,加強制轉換符,會造成精度損失;
比如 byte b; int i = 250; b = (byte)i;若不加強轉符,可以試想一下,你一頓飯只能吃2碗,有人強迫你吃10碗,這后果我就不說了~而如果加了強轉符,就好像此時還是要你吃10碗飯,但是有一種科技可以實現10碗飯的能量壓縮到2碗,你就可以吃的下了。但是這兩者的區別就在于你終究沒有吃10碗,只能是約等于。所以大容量數據轉小容量時會無法避免的出現精度損失。尤其是浮點類型轉整型時,強轉會將小數點后的數字全部截掉,只保留整數部分。