Java零基礎(chǔ)快速入門|數(shù)據(jù)類型(下)

主要內(nèi)容
布爾型詳解
浮點(diǎn)型詳解
基本數(shù)據(jù)類型轉(zhuǎn)換
難點(diǎn)疑惑
布爾型詳解
在Java 語言中布爾類型的值只包括true 和false,沒有其他值,不包括1 和 0,布爾類型的數(shù)據(jù)在開發(fā)中主要使用在邏輯判斷方面,例如:如果外面在下雨,我出門帶一把雨傘。如果明 天休息,咱們就一起出去玩耍吧。
請看一段程序(以下程序中使用了控制語句,后面會詳細(xì)講, 先大概了解一下):

我們對以上程序進(jìn)行編譯并運(yùn)行,請看下圖運(yùn)行結(jié)果:

接下來對以上程序進(jìn)行一個簡單的解釋:其中第 3 行代碼表示定義一個布爾類型的變量isRain 來表示是否下雨了,給其賦值true,以下的判斷邏輯是如果isRain 為true 則輸出"外面下雨了,出門要帶一把雨傘哦!",反之則輸出"外面天氣晴朗,走起吧!"。
第 9 行代碼表示定義一個布爾類型的變量sex 來表示性別,判斷邏輯是如果sex 為true 則輸出"哥們你好",反之則輸出"姐們你好"。
接下來,我們再來看一段代碼,布爾類型變量的值是否可以使用 1 和 0:

我們對以上的程序進(jìn)行編譯,請看下圖結(jié)果:

?通過以上的測試結(jié)果可以看出,在?Java?中布爾類型的變量值不能使用1?和0,只能使用true
和false。
通過本小節(jié)的學(xué)習(xí),大家需要掌握的是在Java 語言中boolean 類型的數(shù)據(jù)只有兩個值,分別是true 和false,沒有其他值,并且boolean 類型在開發(fā)中主要使用在邏輯判斷方面。
?
浮點(diǎn)型詳解
浮點(diǎn)型數(shù)據(jù)實(shí)際上在內(nèi)存中存儲的時候大部分情況下都是存儲了數(shù)據(jù)的近似值,為什么呢?
這是因?yàn)樵诂F(xiàn)實(shí)世界中存在無窮的數(shù)據(jù),例如3.333333333333333333..,數(shù)據(jù)是無窮的, 但是內(nèi)存是有限的,所以只能存儲近似值,float 單精度占4 個字節(jié),double 雙精度占 8 個字節(jié), 相對來說 double 精度要高一些。由于浮點(diǎn)型數(shù)據(jù)存儲的是近似值,所以一般判斷兩個浮點(diǎn)型數(shù)據(jù)是否相等的操作很少。
在 java 語言中有這樣的一條規(guī)定:只要是浮點(diǎn)型的字面量,例如 1.0、3.14 等默認(rèn)會被當(dāng)做double 類型來處理,如果想讓程序?qū)⑵洚?dāng)做float 類型來處理,需要在字面量后面添加f/F。
請看以下代碼:

編譯報(bào)錯了:

為什么會編譯報(bào)錯呢?那是因?yàn)?3.0 默認(rèn)被當(dāng)做double 類型來處理,占用8 個字節(jié),前面的f 變量是float 類型占用 4 個字節(jié),大容量無法直接賦值給小容量。
怎么修改呢?請看代碼:

運(yùn)行結(jié)果如下圖所示:

以上程序的第一種方案在 3.0 ?后面添加了F,3.0F 被當(dāng)做float 類型來處理。第二種方案是進(jìn)行了強(qiáng)制類型轉(zhuǎn)換,第二種方案可能會存在精度損失。
?
基本數(shù)據(jù)類型轉(zhuǎn)換
基本數(shù)據(jù)類型之間是存在固定的轉(zhuǎn)換規(guī)則的,現(xiàn)總結(jié)出以下 6 條規(guī)則,無論是哪個程序,
將這 6 個規(guī)則套用進(jìn)去,問題迎刃而解:
八種基本數(shù)據(jù)類型中,除boolean?類型不能轉(zhuǎn)換,剩下七種類型之間都可以進(jìn)行轉(zhuǎn)換;
如果整數(shù)型字面量沒有超出 byte,short,char?的取值范圍,可以直接將其賦值給
byte,short,char 類型的變量;
小容量向大容量轉(zhuǎn)換稱為自動類型轉(zhuǎn)換,容量從小到大的排序?yàn)椋?/span>byte?< short(char) < int?< long?< float?< double,其中 short 和char?都占用兩個字節(jié),但是char?可以表示更大的正整數(shù);
大容量轉(zhuǎn)換成小容量,稱為強(qiáng)制類型轉(zhuǎn)換,編寫時必須添加“強(qiáng)制類型轉(zhuǎn)換符”,但運(yùn)行時可能出現(xiàn)精度損失,謹(jǐn)慎使用;
byte,short,char?類型混合運(yùn)算時,先各自轉(zhuǎn)換成int?類型再做運(yùn)算;
多種數(shù)據(jù)類型混合運(yùn)算,各自先轉(zhuǎn)換成容量最大的那一種再做運(yùn)算;
接下來,根據(jù)以上的6 條規(guī)則,我們來看一下以下代碼,指出哪些代碼編譯報(bào)錯,以及怎么解決(大家注意看代碼的注釋信息):

編譯報(bào)錯,錯誤信息如下所示:

如何修改,請看以下代碼:



運(yùn)行結(jié)果如下圖所示:

通過本小節(jié)的學(xué)習(xí),大家主要掌握基本數(shù)據(jù)類型轉(zhuǎn)換的6 條規(guī)則,以后遇到類似的問題直接套用規(guī)則即可。
?
難點(diǎn)解惑
本章節(jié)的難點(diǎn)主要還是數(shù)據(jù)類型相互轉(zhuǎn)換這塊,例如:byte a?= 3;這行代碼為什么可以編譯通過呢?
按說 3 是int 類型,而a 變量是byte 類型,大容量轉(zhuǎn)換成小容量不是應(yīng)該使用強(qiáng)制類型轉(zhuǎn)換符嗎,這里沒有使用,也可以編譯通過。
這是因?yàn)?Java 中固定的語法規(guī)則規(guī)定的,當(dāng)一個整數(shù)沒有超出 byte 類型取值范圍時,可以直接賦值給 byte 類型的變量,其實(shí)這一設(shè)計(jì)也是為了方便程序員寫代碼。
另外,我們?nèi)绻谝陨洗a再添加這行代碼:byte b?= a?+ 4;這行代碼為什么又編譯報(bào)錯了呢?
按說a 是 3,3+4 是 7,這個 7 并沒有超出byte 取值范圍,為什么編譯報(bào)錯呢?這是因為byte 類型的a 和int 類型的 4 求和,結(jié)果為int 類型,并且對于以上代碼來說 a 是一個變量, 變量就是一個不確定的值,所以編譯器會認(rèn)為a?+ 4 可能會超出byte 取值范圍,所以編譯報(bào)錯了。
如果我們程序是這樣寫的:byte?b?= 3?+ 4;對于這行代碼來說,編譯又通過了,這是因?yàn)?3 和 4 不是變量,都是確定的值,編譯器會直接檢測出3+4 等于 7,這個 7 并沒有超出范圍,所以編譯又通過了。
章節(jié)小結(jié)
通過本章節(jié)內(nèi)容的學(xué)習(xí):
需要理解數(shù)據(jù)類型在程序中的作用,需要掌握在?Java?語言中數(shù)據(jù)類型包括哪些,其中基本數(shù)據(jù)類型又包括哪些,每個基本數(shù)據(jù)類型所占用的字節(jié)數(shù)量,byte?類型取值范圍等。
另外需要理解字符編碼在程序中的作用。還有每一種數(shù)據(jù)類型特有的語法機(jī)制,包括整數(shù)型字面值默認(rèn)當(dāng)做int?類型處理,如果以long?形式表示,需要在字面值后添加?L或l;
浮點(diǎn)型字面量默認(rèn)被當(dāng)做?double?處理,后面添加?F/f?才可以被當(dāng)做float?類型;而布爾型在Java?中只有true?和false?沒有其他值;字符型變量完全可以存儲1?個漢字等。
除了以上描述之外,還有相對來說難度較大的類型之間的相互轉(zhuǎn)換,這個就需要大家記住相應(yīng)的轉(zhuǎn)換規(guī)則了。
最后附Java零基礎(chǔ)視頻教程給大家,配合學(xué)習(xí)效果更佳!!

