Java基礎(chǔ) - 數(shù)據(jù)類型和運(yùn)算符

Java 語(yǔ)言支持的類型分為兩類:基本數(shù)據(jù)類型(Primitive Type)和引用類型(Reference Type)。

基本數(shù)據(jù)類型

數(shù)值類型

整數(shù)類型

byte

一個(gè) byte 類型在內(nèi)存中占 8 位(1字節(jié))范圍-128(-2^7) ~ 127(2^7 -1)

short

一個(gè) short 類型在內(nèi)存中占 16 位(2字節(jié))范圍-32768(-2^15) ~ 32767(2^15-1)

int

一個(gè) int 類型在內(nèi)存占 32 位(4字節(jié))范圍-2147483648(-2^31) ~ 2147483647(2^31-1)

long

一個(gè) long 類型在內(nèi)存中占 64 位(8 字節(jié))范圍-2^63 ~ 2^63-1

如果直接將一個(gè)較小的整數(shù)值(在 byte 或者 short 類型的范圍內(nèi))賦給一個(gè) byte 或者 short 的變量,系統(tǒng)會(huì)自動(dòng)把這個(gè)整數(shù)值當(dāng)成 byte 或者 short 類型來處理.
如果使用一個(gè)巨大的整數(shù)值(超出 int 類型的范圍)時(shí)熄捍,Java 不會(huì)自動(dòng)把這個(gè)整數(shù)值當(dāng)成 long 類型來處理烛恤。如果希望系統(tǒng)把一個(gè)整數(shù)值當(dāng)成 long 類型來處理,應(yīng)在這個(gè)整數(shù)值后增加 l 或者 L 做后綴余耽。

浮點(diǎn)類型

Java 的浮點(diǎn)類型有固定的表數(shù)范圍和字段長(zhǎng)度缚柏,字段長(zhǎng)度和表數(shù)范圍與機(jī)器無關(guān),Java 的浮點(diǎn)類型遵循 IEEE 標(biāo)準(zhǔn)碟贾,采用二進(jìn)制的科學(xué)計(jì)數(shù)法來表示币喧。

float

一個(gè) float 類型在內(nèi)存中占 4 字節(jié),32 位缕陕,第 1 位是符號(hào)位粱锐,接下來的 8 位表示指數(shù),在接下來的 23 位表示位數(shù)扛邑。

double

一個(gè) double 類型在內(nèi)存中占 8 字節(jié)怜浅,64 位,第 1 位表示符號(hào)位蔬崩,接下來的 11 位表示指數(shù)恶座,在接下來的 52 位表示尾數(shù)。

因?yàn)?Java 浮點(diǎn)數(shù)是用二進(jìn)制的科學(xué)計(jì)數(shù)法來表示浮點(diǎn)數(shù)沥阳,因此可能不能精確表示一個(gè)浮點(diǎn)數(shù)跨琳。例如把 5.12345f賦值給一個(gè) float 類型的變量,接著輸出這個(gè)變量時(shí)看到這個(gè)變量的值已經(jīng)發(fā)生了改變桐罕。 如果需要一個(gè)精確的浮點(diǎn)數(shù)脉让,可以使用 BigDecimal 類桂敛。
浮點(diǎn)類型默認(rèn)的是 double 如果希望 Java 把一個(gè)浮點(diǎn)類型值當(dāng)成 float 來處理,應(yīng)當(dāng)在這個(gè)浮點(diǎn)類型值后面緊跟一個(gè) f 或者 F溅潜。
Java 還提供了三個(gè)特殊的浮點(diǎn)數(shù)值:正無窮大术唬,負(fù)無窮大和非數(shù),用于表示溢出或者出錯(cuò)滚澜。正浮點(diǎn)數(shù)除以 0(Java會(huì)自動(dòng)把和浮點(diǎn)數(shù)進(jìn)行運(yùn)算的整數(shù) 0 當(dāng)成浮點(diǎn)數(shù) 0.0 處理)得到正無窮大(Double/Float 類中的 POSITIVE_INFINITY).使用一個(gè)負(fù)浮點(diǎn)數(shù)除以 0 得到負(fù)無窮大(Double/Float 類中的 NEGATIVE_INFINITY)
表示粗仓。0.0/0.0 將得到一個(gè)非數(shù) NaN.
所有的正無窮大以及負(fù)無窮大都相等,所有的非數(shù)都不相等。
100_000_000_000數(shù)值中的_方便閱讀。無實(shí)際含義蛛蒙。

字符型

char

字符型有三種表示形式

  • 直接通過單個(gè)字符來指定字符型值,例如'A'夫否、'9''0' 等.
  • 通過轉(zhuǎn)移字符標(biāo)識(shí)特殊字符型值,例如'\n''\t'
  • 直接使用 Unicode 值來表示字符型值,格式是'\uXXXX'橡淆,其中 XXXX 代表 一個(gè)十六進(jìn)制的整數(shù)。
常見字符

字符類型也可以使用十六進(jìn)制編碼方式來表示母赵,范圍是'\u0000'~'\uFFFF',一共可以表示 65535 個(gè)字符具滴,其中前 256 個(gè)('\u0000'~'\u00FF')字符和 ASCII 碼中的字符完全重合凹嘲。
計(jì)算機(jī)底層保存字符時(shí),實(shí)際上保存的是該字符對(duì)應(yīng)的編號(hào)构韵,因此 char 類型的值可以直接作為整形使用周蹭,它相當(dāng)于一個(gè) 16 位的無符號(hào)整數(shù),表數(shù)范圍是 0~65535.
如果把 0~65535 范圍內(nèi)的一個(gè) int 整數(shù)賦給 char 類型變量疲恢,系統(tǒng)自動(dòng)會(huì)把這個(gè) int 整數(shù)當(dāng)成 char 類型來處理

布爾類型

boolean

用于表示邏輯上的, boolean類型的數(shù)值只能是 true 或者 false, 不能用 0 或者非0 來表示凶朗,其他基本數(shù)據(jù)類型也不能轉(zhuǎn)換成 boolean 類型。

Java 規(guī)范沒有強(qiáng)制指定 boolean 類型的變量所占用的內(nèi)存空間显拳。由于大部分計(jì)算機(jī)在內(nèi)存分配時(shí)允許的最小內(nèi)存單元是字節(jié)(8 位)棚愤,因此 bit 大部分時(shí)候?qū)嶋H占用 8 位。
Java虛擬機(jī)規(guī)范一書提到 :

  • 在Java虛擬機(jī)中沒有任何供 boolean值專用的字節(jié)碼指令,Java語(yǔ)言表達(dá)式所操作的
    boolean值,在編譯之后都使用Java虛擬機(jī)中的int數(shù)據(jù)類型來代替杂数。
  • Java虛擬機(jī)直接支持 boolean類型的數(shù)組,虛擬機(jī)的 navarra指令參見第6章的newarray小節(jié)可以創(chuàng)建這種數(shù)組宛畦。boolean類型數(shù)組的訪問與修改共用byte類型數(shù)組的baload和 bastore指令。
    因?yàn)樵谔摂M機(jī)規(guī)范中說了揍移,boolean值在編譯之后都使用Java虛擬機(jī)中的int數(shù)據(jù)類型來代替次和,而int是4個(gè)字節(jié),那么boolean值就是4個(gè)字節(jié)那伐。
  • boolean類型數(shù)組的訪問與修改共用byte類型數(shù)組的baload和 bastore指令踏施,因?yàn)閮烧吖灿檬幔挥袃烧咦止?jié)一樣才能通用呀,所以byte數(shù)組中一個(gè)byte是1個(gè)字節(jié)畅形,那么boolean數(shù)組中boolean是1個(gè)字節(jié)养距。

總結(jié):boolean在數(shù)組情況下為1個(gè)字節(jié),單個(gè)boolean為4個(gè)字節(jié)束亏。

基本數(shù)據(jù)類型的轉(zhuǎn)換

Java 所有的數(shù)值類型可以相互轉(zhuǎn)換,如果系統(tǒng)支持把某種基本類型的值直接賦給另一種基本類型的變量,則這種方式被稱為自動(dòng)類型轉(zhuǎn)換.當(dāng)把一個(gè)表述范圍小的數(shù)值或者變量直接賦給另一個(gè)表數(shù)范圍大的變量時(shí),系統(tǒng)可以進(jìn)行自動(dòng)類型轉(zhuǎn)換.否則就需要強(qiáng)制轉(zhuǎn)換.

自動(dòng)類型轉(zhuǎn)換

表數(shù)范圍小的數(shù)值賦給表數(shù)范圍的變量.
Java 支持自動(dòng)類型轉(zhuǎn)換圖:


除了基本類型的自動(dòng)轉(zhuǎn)換外,把任何基本類型的值和字符串進(jìn)行連接運(yùn)算時(shí),基本類型的值將自動(dòng)轉(zhuǎn)為字符串類型(ps:將基本類型轉(zhuǎn)化為字符串類型時(shí),可以把基本類型的值與空字符串相加).

強(qiáng)制類型轉(zhuǎn)換

如果想把上圖箭頭右邊的數(shù)據(jù)類型轉(zhuǎn)換為左邊的類型,則必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換.強(qiáng)轉(zhuǎn)的格式為(TargetType)value強(qiáng)制類型轉(zhuǎn)換的運(yùn)算符是圓括號(hào).
需要注意強(qiáng)制類型轉(zhuǎn)換會(huì)造成數(shù)據(jù)溢出,從而導(dǎo)致數(shù)據(jù)丟失.

表達(dá)式類型的自動(dòng)提升

當(dāng)一個(gè)算術(shù)表達(dá)式中包含多個(gè)基本類型的值時(shí), 整個(gè)算術(shù)表達(dá)式的數(shù)據(jù)類型將發(fā)生自動(dòng)提升.
Java 自動(dòng)提升規(guī)則:

  • 所有的 byte 類型,short 類型和 char 類型將被提升到 int 類型.
  • 整個(gè)算術(shù)表達(dá)式的數(shù)據(jù)類型自動(dòng)提升到與表達(dá)式中最高等級(jí)操作同樣的類型.操作數(shù)的等級(jí)如上如所示,箭頭右邊的等級(jí)高于箭頭左邊類型的等級(jí).

引用數(shù)據(jù)類型

接口

數(shù)組

運(yùn)算符

算術(shù)運(yùn)算符

  • +: 加法運(yùn)算符(還可以作為字符串的連接運(yùn)算符)
  • -: 減法運(yùn)算符
  • *: 乘法運(yùn)算符
  • /: 除法運(yùn)算符
    如果除法運(yùn)算的兩個(gè)操作數(shù)都是整數(shù)類型铃在,則計(jì)算結(jié)果也是整數(shù),就是將自然除法的結(jié)果截取取整碍遍。如果除法運(yùn)算兩個(gè)操作數(shù)都是整數(shù)類型定铜,則除數(shù)不可以是 0,否則將引發(fā)除以 0 異常怕敬。如果一個(gè)或兩個(gè)操作數(shù)是浮點(diǎn)數(shù)揣炕,則計(jì)算結(jié)果也是浮點(diǎn)數(shù),這個(gè)結(jié)果就是自然除法的結(jié)果东跪,而且此時(shí)允許除數(shù)是 0 或者 0.0畸陡,得到的結(jié)果是正無窮大揮著負(fù)無窮大。
  • %: 求余運(yùn)算符
  • ++: 自加虽填。
    1. 自加是單目運(yùn)算符丁恭,只能操作一個(gè)數(shù)。
    2. 自加運(yùn)算符只能操作單個(gè)數(shù)值型(整形斋日、浮點(diǎn)型)變量牲览,不能操作常量或表達(dá)式。
    3. 如果 ++ 放在左邊恶守,則先把操作數(shù)加 1第献,然后才把操作數(shù)放入表達(dá)式中運(yùn)算。如果 ++ 放在右邊兔港,則先把操作數(shù)放入表達(dá)式中運(yùn)算庸毫,然后才把操作數(shù)加 1
  • --: 自減。單目運(yùn)算符衫樊。與++ 類似飒赃,只是將操作數(shù) -1

位運(yùn)算符

  • &: 按位與。當(dāng)兩位同時(shí)為 1 時(shí)才返回 1.
  • |: 按位或橡伞。只要有一位為 1 即可返回 1盒揉。
  • ~: 按位非。單目運(yùn)算符兑徘,將操作數(shù)的每個(gè)位(包括符號(hào)位)全部取反刚盈。
  • ^: 按位異或。當(dāng)兩位相同時(shí)返回0挂脑,不同時(shí)返回 1藕漱。
  • <<: 左移運(yùn)算符欲侮。
  • >>: 右移運(yùn)算符.
  • >>>: 無符號(hào)右移運(yùn)算符.

邏輯運(yùn)算符

  • &&: 與,前后兩個(gè)操作數(shù)必須都是 true 才返回 true,否則飯后 false.
  • &: 不短路與,與 &&作用相同,但不會(huì)短路.
  • ||:或,只要兩個(gè)操作數(shù)一個(gè)為true,則返回 true,否則返回 false
  • |: 不短路或, 作用與 ||相同,但不會(huì)短路.
  • !: 非. 取反
  • ^: 異或. 當(dāng)兩個(gè)操作數(shù)不同時(shí)返回 true,相同時(shí)返回 false

三目運(yùn)算符

  • ?: 三目運(yùn)算符只有一個(gè),語(yǔ)法格式為(expression) ? if-true-statement : if-false-statement

注意:
自加和自減只能用于慚怍變量,不能用于操作數(shù)值直接量肋联、常量或表達(dá)式威蕉。

賦值運(yùn)算符

  • =

擴(kuò)展后的賦值運(yùn)算符

  • +=: 對(duì)于 x+=y,即對(duì)應(yīng)于 x = x + y
  • -=: 對(duì)于 x-=y,即對(duì)應(yīng)于 x = x - y
  • *=: 對(duì)于 x*=y,即對(duì)應(yīng)于 x = x * y
  • /=: 對(duì)于 x/=y,即對(duì)應(yīng)于 x = x / y
  • %=: 對(duì)于 x%=y,即對(duì)應(yīng)于 x = x % y
  • |=: 對(duì)于 x|=y,即對(duì)應(yīng)于 x = x | y
  • ^=: 對(duì)于 x^=y,即對(duì)應(yīng)于 x = x ^ y
  • <<=: 對(duì)于 x<<=y,即對(duì)應(yīng)于 x = x << y
  • >>=: 對(duì)于 x>>=y,即對(duì)應(yīng)于 x = x >> y
  • >>>=: 對(duì)于 x>>>=y,即對(duì)應(yīng)于 x = x >>> y

比較運(yùn)算符

  • >: 大于,只支持左右兩邊操作數(shù)是數(shù)值類型.
  • >=: 大于等于,只支持左右兩邊操作數(shù)是數(shù)值類型.
  • <: 小于,只支持左右兩邊操作數(shù)是數(shù)值類型.
  • <=: 小于等于,只支持左右兩邊操作數(shù)是數(shù)值類型.
  • ==: 等于,如果比較的兩個(gè)操作數(shù)都是數(shù)值類型,即使兩個(gè)操作數(shù)的類型不同,只要他們值相等,也返回true. 如果兩個(gè)操作數(shù)都是引用類型,那么比較的是兩個(gè)操作數(shù)的引用地址.
  • !=: 不等于.數(shù)據(jù)類型比較,無關(guān)類型,只進(jìn)行值比較.引用類型比較對(duì)象的引用地址.

運(yùn)算符的優(yōu)先級(jí)

  • 不要把一個(gè)表達(dá)式寫的過于復(fù)雜,如果一個(gè)表達(dá)式復(fù)雜,則應(yīng)該拆成幾步來執(zhí)行
  • 不要過多的依賴運(yùn)算符的優(yōu)先級(jí)來控制表達(dá)式的執(zhí)行順序,盡量用 () 來控制
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市橄仍,隨后出現(xiàn)的幾起案子韧涨,更是在濱河造成了極大的恐慌,老刑警劉巖侮繁,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虑粥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宪哩,警方通過查閱死者的電腦和手機(jī)娩贷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锁孟,“玉大人彬祖,你說我怎么就攤上這事∑烦椋” “怎么了储笑?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)圆恤。 經(jīng)常有香客問我南蓬,道長(zhǎng),這世上最難降的妖魔是什么哑了? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮烧颖,結(jié)果婚禮上弱左,老公的妹妹穿的比我還像新娘。我一直安慰自己炕淮,他們只是感情好拆火,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涂圆,像睡著了一般们镜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上润歉,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天模狭,我揣著相機(jī)與錄音,去河邊找鬼踩衩。 笑死嚼鹉,一個(gè)胖子當(dāng)著我的面吹牛贩汉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锚赤,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼匹舞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了线脚?” 一聲冷哼從身側(cè)響起赐稽,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浑侥,沒想到半個(gè)月后姊舵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锭吨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蠢莺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片零如。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躏将,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出考蕾,到底是詐尸還是另有隱情祸憋,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布肖卧,位于F島的核電站蚯窥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏塞帐。R本人自食惡果不足惜拦赠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葵姥。 院中可真熱鬧荷鼠,春花似錦、人聲如沸榔幸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)削咆。三九已至牍疏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拨齐,已是汗流浹背鳞陨。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奏黑,地道東北人炊邦。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓编矾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親馁害。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窄俏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容