標籤:
Java 語言是靜態類型的(statical typed),也就是說所有變數和運算式的類型再編譯時間就已經完全確定。由於是靜態類型,導致 Java 語言也是強型別(Strong typed)的。強型別意味著每個變數都具有一種類型,每個運算式具有一種類型,並且每種類型都是嚴格定義的,類型限制了變數可以接收哪些值,運算式最終產生什麼值。同時限制了這些值可以進行的操作類型以及操作的具體方式。所有的賦值操作,無論是顯式的還是在方法調用中通過參數傳遞,都要進行類型相容性檢查。
資料類型
在 Java 原始碼中,每個變數都必須聲明一種類型(type)。有兩種類型:基本類型(primitive type) 和參考型別(reference type)。參考型別引用對象(reference to object),而基本類型直接包含值(directly contain value)。基本類型(primitive types)包括 boolean 類型以及數實值型別(numeric types)。數實值型別又分為整型(integer types)和浮點型(floating-point type)。整型有5種:byte short int long char(char 本質上是一種特殊的 int)。浮點類型有 float 和 double。關係整理一下如:
null 是一種特殊的類型 ,但是你不能聲明一個變數為 null 類型,null 類型的唯一取值就是 null。null 可以負值給任意的參考型別或者轉化成任意的參考型別。在實踐中,一般把 null 當做字面值(literal),這個字面值可是是任意的參考型別。
其它參考型別將在之後介紹,此處不不再贅述。
基本類型
基本類型是單個值,而不是複雜的對象,基本類型不是物件導向的,主要出去效率方面的考慮,但是同時也提供基本類型的對象版本,即基本類型的封裝器(wrapper)。可以直接使用這些基本類型,也可以使用基本類型構造數組或者其他自訂類型。基本類型具有明確的取值範圍和數學行為。
| 基本類型 |
大小 |
最小值 |
最大值 |
封裝類 |
| boolean |
-- |
-- |
-- |
Boolean |
| char |
16 bits |
Unicode 0 |
Unicode 216-1 |
Character |
| byte |
8 bits |
-128 |
+127 |
Byte |
| short |
16 bits |
-2^15 |
+2^15-1 |
Short |
| int |
32 bits |
-2^31 |
+2^31-1 |
Integer |
| long |
64 bits |
-2^63 |
+2^63-1 |
Long |
| float |
32 bits |
IEEE754 |
IEEE754 |
Float |
| double |
64 bits |
IEEE754 |
IEEE754 |
Double |
| void |
-- |
-- |
-- |
Void |
基本類型之間的轉換
將一種類型的值賦給另一種類型是很常見的。在 Java 中,boolean 類型與所有其他7種類型都不能進行轉換。而其他7種數實值型別之間都可以互相轉換,但是可能會存在精度損失或者其他一些變化。轉換分為自動轉換和強制轉換。對於自動轉換(隱式),無需任何操作,而強制類型轉換需要顯式轉換,即使用轉換操作符。
7種基本類型轉換總結如:
在使用字面值對整數賦值的過程中,可以將 int 賦值給byte short char int,只要不超出範圍。這個過程中的類型轉換時自動完成的,但是如果你試圖將 long 賦給byte,即使沒有超出範圍,也必須進行強制類型轉換。例如 byte b = 10L;是錯的,要進行強制轉換。
除了賦值以外,運算式計算過程中也可能發生一些類型轉換。在運算式中,型別提升規則如下:
- 所有 byte/short/char 都被提升為 int
- 如果有一個運算元為 long,整個運算式提升為 long。float 和 double 情況也一樣
Java基礎資料型別 (Elementary Data Type)