當前位置:
首頁 > 最新 > Java學習中的一些疑惑解答

Java學習中的一些疑惑解答

一、java中的枚舉類型:

在實際編程中,往往存在著這樣的「數據集」,它們的數值在程序中是穩定的,而且「數據集」中的元素是有限的。例如星期一到星期日七個數據元素組成了一周的「數據集」,春夏秋冬四個數據元素組成了四季的「數據集」。在java中如何更好的使用這些「數據集」呢?因此枚舉便派上了用場,下面的一段代碼來說明枚舉類型的特點和用法:

從運行結果來看

(1) 枚舉類型中的元素不是一個對象,枚舉是一個數據集,它的每個具體值都引用一個特定的對象。相同的值則引用同一個對象。

(2) 枚舉類型是一種新的數據類型,並非是原始數據類型

(3) 枚舉類型中的元素可以轉換為字元串類型,並且裡面的所以元素可以列舉出來

二、反碼,補碼,原碼的理解:

在學習原碼, 反碼和補碼之前, 需要先了解機器數和真值的概念。

1、機器數

一個數在計算機中的二進位表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數為0, 負數為1.

2、真值

因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 {},其最高位1代表負,其真正數值是 -3 而不是形式值131({}轉換成十進位等於131)。所以,為區別起見,將帶符號位的機器數對應的真正數值稱為機器數的真值。

例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

對於一個數, 計算機要使用一定的編碼方式進行存儲. 原碼, 反碼, 補碼是機器存儲一個具體數字的編碼方式.

1. 原碼

原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符號位. 因為第一位是符號位, 所以8位二進位數的取值範圍就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原碼是人腦最容易理解和計算的表示方式.

2. 反碼

反碼的表示方法是:正數的反碼是其本身,負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.

[-1] = [{}]原 = [{}]反

可見如果一個反碼錶示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算.

3. 補碼

補碼的表示方法是:正數的補碼就是其本身,負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)

[-1] = [{}]原 = [{}]反 = [{}]補

對於負數, 補碼錶示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.

三、Java中同名變數的屏蔽原則:

每個變數都有一個「有效」的區域(稱為「作用域」),出了這個區域,變數將不再有效,同名的變數在指定的範圍內有自動屏蔽的原則。即局部變數可以與全局變數同名,在函數內引用這個變數時,會用到同名的局部變數,而不會用到全局變數。下面以一段程序來進行說明:

四、Java中數據類型的轉換規則:

基本數據類型的轉換是指由系統根據轉換規則自動完成,不需要程序員明確地聲明不同數據類型之間的轉換。轉換在編譯器執行,而不是等到運行期再執行。

具體規則:

(1)布爾型和其它基本數據類型之間不能相互轉換;

(2)byte型可以轉換為short、int、long、float和double;

(3)short可轉換為int、long、float和double;

(4)char可轉換為int、long、float和double;

(5)int可轉換為long、float和double;

(6)long可轉換為float和double;

(7)float可轉換為double;

註:(其中除了float類型轉換為double類型為無精度損失,其他類型轉換為double類型都是有精度損失)

也就是說,只能有取值窄的範圍向寬範圍轉換,反之則不行。

五、問題:為什麼double類型的數值進行運算得不到「數學上精確」的結果?

答案:這個涉及到二進位與十進位的轉換問題。N進位可以理解為:數值×基數的冪,例如我們熟悉的十進位數123.4=1×102+2×10+3×(10的0次冪)+4×(10的-1次冪);其它進位的也是同理,例如二進位數11.01=1×2+1×(2的0次冪)+0+1×(2的-2次冪)=十進位的3.25。

double類型的數值佔用64bit,即64個二進位數,除去最高位表示正負符號的位,在最低位上一定會與實際數據存在誤差(除非實際數據恰好是2的n次方)。

舉個例子來說,比如要用4bit來表示小數3.26,從高到低位依次對應2的1,0,-1,-2次冪,根據最上面的分析,應當在二進位數11.01(對應十進位的3.25)和11.10(對應十進位的3.5)之間選擇。

簡單來說就是我們給出的數值,在大多數情況下需要比64bit更多的位數才能準確表示出來(甚至是需要無窮多位),而double類型的數值只有64bit,後面捨去的位數一定會帶來誤差,無法得到「數學上精確」的結果。

六、Java中輸出的加號連接符的使用:

首先看看下面的代碼輸出結果:

輸出結果為:

從輸出結果我們可以看出只有與 」 」 字元串直接相連的後面 「+」 加號才會都被定義成連接符。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

作為一名合格的JAVA程序員需要點亮那些技能樹
純乾貨分享 Java必備基礎知識點十
JAVA技巧心得:學Java切忌浮躁!
2017需求最旺的編程語言
Java初學者必知:Java語言的11大特點

TAG:java學習吧 |

您可能感興趣

關於榮耀Watch Magic的使用初體驗:有一些疑惑和答案
初學者入門Python常見的疑惑及解答!
國際滑聯總監Josh Friedberg,深入解答滑板進奧運的疑惑
卜凡穿貂蔡徐坤脫衣,Justin竟拿第一,范丞丞疑惑你們不愛rap嗎
CrossFit基礎訓練課一個半月的成果和疑惑
《Running Man》梁世燦的即興表演,「女友疑惑」爆笑
YG或為掩蓋Big bang Top吸毒疑惑,指使韓瑞熙出國
TheShy疑惑打野真那麼難?排位兩連勝後大亂斗獎勵自己:easy
疑似Galaxy Note 9諜照曝光 指紋識別方式成疑惑
一位果粉的疑惑:同學會拿出iPhoneXR是不是會被人笑話?
wifi是什麼?看她疑惑的小表情和語氣!
解答CRISPR基因編輯疑惑:為何有時無效?
陳冠希帶女兒重遊日本,見面藤原浩,Alaia一臉疑惑!
小米Play會是何方神聖?三大分析一解疑惑!
韓國metoo運動,現職偶像歌手被曝性醜聞疑惑
The shy無視教練BP,觀眾疑惑為何能壓船長,奇葩出裝讓人看不懂
老油條NiKo蠱惑冷神加入?兩選手Ins奇妙互動令人疑惑
只做hiit訓練會分解肌肉嗎?進來帶你解除疑惑
新iPhone銷量慘淡,庫克疑惑:中國人不再喜歡蘋果了?
SKT bang首談亞運會:到現在還沒人聯絡我,我很疑惑!