Java 語言支持的類型分爲兩類:
基本數據類型
(Primitive Type)和引用類型
(Reference Type)。算法
一個 byte
類型在內存中佔 8 位(1字節)範圍-128(-2^7) ~ 127(2^7 -1)
express
一個 short
類型在內存中佔 16 位(2字節)範圍-32768(-2^15) ~ 32767(2^15-1)
數組
一個 int
類型在內存佔 32 位(4字節)範圍-2147483648(-2^31) ~ 2147483647(2^31-1)
編碼
一個 long
類型在內存中佔 64 位(8 字節)範圍-2^63 ~ 2^63-1
3d
若是直接將一個較小的整數值(在
byte
或者short
類型的範圍內)賦給一個byte
或者short
的變量,系統會自動把這個整數值當成byte
或者short
類型來處理.
若是使用一個巨大的整數值(超出 int 類型的範圍)時,Java 不會自動把這個整數值當成 long 類型來處理。若是但願系統把一個整數值當成 long 類型來處理,應在這個整數值後增長l
或者L
作後綴。code
Java 的浮點類型有固定的表數範圍和字段長度,字段長度和表數範圍與機器無關,Java 的浮點類型遵循 IEEE 標準,採用二進制的科學計數法來表示。對象
一個 float 類型在內存中佔 4 字節,32 位,第 1 位是符號位,接下來的 8 位表示指數,在接下來的 23 位表示位數。blog
一個 double 類型在內存中佔 8 字節,64 位,第 1 位表示符號位,接下來的 11 位表示指數,在接下來的 52 位表示尾數。接口
由於 Java 浮點數是用二進制的科學計數法來表示浮點數,所以可能不能精確表示一個浮點數。例如把
5.12345f
賦值給一個float
類型的變量,接着輸出這個變量時看到這個變量的值已經發生了改變。 若是須要一個精確的浮點數,可使用BigDecimal
類。
浮點類型默認的是double
若是但願Java
把一個浮點類型值當成float
來處理,應當在這個浮點類型值後面緊跟一個f
或者F
。
Java 還提供了三個特殊的浮點數值:正無窮大,負無窮大和非數,用於表示溢出或者出錯。正浮點數除以 0(Java會自動把和浮點數進行運算的整數 0 當成浮點數 0.0 處理)獲得正無窮大(Double/Float 類中的 POSITIVE_INFINITY).使用一個負浮點數除以 0 獲得負無窮大(Double/Float 類中的 NEGATIVE_INFINITY)
表示。0.0/0.0 將獲得一個非數 NaN.
全部的正無窮大以及負無窮大都相等,全部的非數都不相等。
100_000_000_000數值中的_
方便閱讀。無實際含義。內存
字符型有三種表示形式
'A'
、'9'
和 '0'
等.'\n'
、'\t'
Unicode
值來表示字符型值,格式是'\uXXXX'
,其中 XXXX
表明 一個十六進制的整數。字符類型也可使用十六進制編碼方式來表示,範圍是'\u0000'~'\uFFFF'
,一共能夠表示 65535
個字符,其中前 256 個('\u0000'~'\u00FF'
)字符和 ASCII 碼中的字符徹底重合。
計算機底層保存字符時,實際上保存的是該字符對應的編號,所以 char
類型的值能夠直接做爲整形使用,它至關於一個 16 位的無符號整數,表數範圍是 0~65535
.
若是把 0~65535 範圍內的一個 int
整數賦給 char
類型變量,系統自動會把這個 int
整數當成 char
類型來處理
用於表示邏輯上的真
或假
, boolean
類型的數值只能是 true
或者 false
, 不能用 0
或者非0
來表示,其餘基本數據類型也不能轉換成 boolean
類型。
Java 規範沒有強制指定 boolean 類型的變量所佔用的內存空間。因爲大部分計算機在內存分配時容許的最小內存單元是字節(8 位),所以 bit 大部分時候實際佔用 8 位。
Java虛擬機規範一書提到 :
- 在Java虛擬機中沒有任何供 boolean值專用的字節碼指令,Java語言表達式所操做的
boolean值,在編譯以後都使用Java虛擬機中的int數據類型來代替。- Java虛擬機直接支持 boolean類型的數組,虛擬機的 navarra指令參見第6章的newarray小節能夠建立這種數組。boolean類型數組的訪問與修改共用byte類型數組的baload和 bastore指令。
由於在虛擬機規範中說了,boolean值在編譯以後都使用Java虛擬機中的int數據類型來代替,而int是4個字節,那麼boolean值就是4個字節。- boolean類型數組的訪問與修改共用byte類型數組的baload和 bastore指令,由於二者共用,只有二者字節同樣才能通用呀,因此byte數組中一個byte是1個字節,那麼boolean數組中boolean是1個字節。
總結:boolean在數組狀況下爲1個字節,單個boolean爲4個字節。
Java 全部的數值類型能夠相互轉換,若是系統支持把某種基本類型的值直接賦給另外一種基本類型的變量,則這種方式被稱爲自動類型轉換.當把一個表述範圍小的數值或者變量直接賦給另外一個表數範圍大的變量時,系統能夠進行自動類型轉換.不然就須要強制轉換.
表數範圍小的數值賦給表數範圍的變量.
Java 支持自動類型轉換圖:
除了基本類型的自動轉換外,把任何基本類型的值和字符串進行鏈接運算時,基本類型的值將自動轉爲字符串類型(ps:將基本類型轉化爲字符串類型時,能夠把基本類型的值與空字符串相加).
若是想把上圖箭頭右邊的數據類型轉換爲左邊的類型,則必須進行強制類型轉換.強轉的格式爲(TargetType)value
強制類型轉換的運算符是圓括號.
須要注意強制類型轉換會形成數據溢出,從而致使數據丟失.
當一個算術表達式中包含多個基本類型的值時, 整個算術表達式的數據類型將發生自動提高.
Java 自動提高規則:
+
: 加法運算符(還能夠做爲字符串的鏈接運算符)-
: 減法運算符*
: 乘法運算符/
: 除法運算符%
: 求餘運算符++
: 自加。
--
: 自減。單目運算符。與++
相似,只是將操做數 -1&
: 按位與。當兩位同時爲 1 時才返回 1.|
: 按位或。只要有一位爲 1 便可返回 1。~
: 按位非。單目運算符,將操做數的每一個位(包括符號位)所有取反。^
: 按位異或。當兩位相同時返回0,不一樣時返回 1。<<
: 左移運算符。>>
: 右移運算符.>>>
: 無符號右移運算符.&&
: 與,先後兩個操做數必須都是 true
才返回 true
,不然飯後 false
.&
: 不短路與,與 &&
做用相同,但不會短路.||
:或,只要兩個操做數一個爲true
,則返回 true
,不然返回 false
|
: 不短路或, 做用與 ||
相同,但不會短路.!
: 非. 取反^
: 異或. 當兩個操做數不一樣時返回 true
,相同時返回 false
?:
三目運算符只有一個,語法格式爲(expression) ? if-true-statement : if-false-statement
注意:
自加和自減只能用於慚怍變量,不能用於操做數值直接量、常量或表達式。
=
+=
: 對於 x+=y
,即對應於 x = x + y
-=
: 對於 x-=y
,即對應於 x = x - y
*=
: 對於 x*=y
,即對應於 x = x * y
/=
: 對於 x/=y
,即對應於 x = x / y
%=
: 對於 x%=y
,即對應於 x = x % y
|=
: 對於 x|=y
,即對應於 x = x | y
^=
: 對於 x^=y
,即對應於 x = x ^ y
<<=
: 對於 x<<=y
,即對應於 x = x << y
>>=
: 對於 x>>=y
,即對應於 x = x >> y
>>>=
: 對於 x>>>=y
,即對應於 x = x >>> y
>
: 大於,只支持左右兩邊操做數是數值類型.>=
: 大於等於,只支持左右兩邊操做數是數值類型.<
: 小於,只支持左右兩邊操做數是數值類型.<=
: 小於等於,只支持左右兩邊操做數是數值類型.==
: 等於,若是比較的兩個操做數都是數值類型,即便兩個操做數的類型不一樣,只要他們值相等,也返回true
. 若是兩個操做數都是引用類型,那麼比較的是兩個操做數的引用地址.!=
: 不等於.數據類型比較,無關類型,只進行值比較.引用類型比較對象的引用地址.()
來控制