java的8種基本數據類型

熟悉c++的話,對java的數據類型不會陌生,很相似。java是一種強類型的語言,也就是任何變量都需要聲明類型,並且還要考慮數據類型的範圍和轉化問題。

java一共有8種基本的數據類型;4類整型,2類浮點型,布爾型,和表示unicode編碼的字符單元的字符類型char型。和c++不一樣!java的類型範圍和機器或者平臺無關,永遠不變。並且java沒有無符號數,這點和c++有很大不同,注意區分,java裏是直接按照二進制的首位1代表負數,0代表正數來約束範圍。

java的四種整型
類型 所佔字節數 範圍
long 8個 大約是10的7次方個兆級別的數字(足夠用了,沒有必要強記這些大數字,理解了原理和心中明白大致的範圍就行了),也就是10的19次,正負差1
int 4個 大約剛剛超過21億(也是正負相差1)
short 2個 -32767到+32768
byte 1個 -128到+127
知道算法即可,一個字節爲8位(1byte=8bit),以byte類型爲例;負數是1000 0000,正數是0111 1111,其餘的依次類推即可。

補充;

萬:10的4次,千萬是10的7次,百萬是10的6次。

億:代表的是10的八次方。 

兆:代表的是10的十二次方。 

京:代表的是10的十六次方。

再大的話基本我們大部分人在一般情況下就很少接觸了。前面說了,java的整型範圍和平臺無關,這就保證了軟件的移植良好。通常,int是我們常用的,但是當表示較大數,比如大數據的文件數時,就要用long,byte和short主要用在特定場合。並且注意long型的用法,後面加L(大小寫不限),否則默認是int。

long longNumber = 9223372036854775806l;

接下來是2種浮點型類型;float(單精度)和double(雙精度),注意!c語言中還有一種long double類型。

java的兩類浮點類型
類型 字節數 範圍
double         8             記住有效位數爲15位,相當大部分的程序都採用雙精度double。
這樣肯定不會錯。
float 4 有效位數爲6-7位,用的不多
比如在需要快速處理單精度數據的時候,會用到,其他情況就double就哦了

科普下浮點數;因爲有小數,這個小數點漂浮不定,就像大海中的漂流物浮起來位置不定一樣,我們起了個名字—浮點數,也就是科學計數法,由階碼和尾碼組成,也就是有效數字和指數組成, 類似這樣 1.0x10^3,這樣這個數就是一千,我們只用記錄1和3這兩個關鍵數就可以表示,所佔空間小,否則是1000,這樣你就需要記錄1個1和3個0,佔據空間大,這種數的小數點不是飄動的,所以不叫浮點數,浮點數節省空間,所以計算機裏的小數,和位數比較高的數都用浮點數。不同的是計算機裏是2進制浮點。

例如;

3.14=314e-2表示314×10的-2次,這是10進制的記法,用e代表指數。在jdk5.0,可用16進製表示浮點數,用p表示指數,比如;0x1.0p-3,但是尾數採用16進制,指數採用十進制。注意寫法;float類型的數字後面帶f(F),否則默認是double,double可帶可不帶。

float f = 3.14f;
double doubleNumA= 3.14d;
double doubleNumB = 3.141592653;
所有的浮點數都遵循IEEE 754(電氣和電子工程師協會Institute of Electrical and Electronics Engineers)規範

另外java還有三類表示出錯和溢出的浮點數值,但是不是很常用。即爲;正無窮大POSITIVE_INFINITY,負無窮大NEGATIVE_INFINITY,不是一個數字NaN(not a number),不是很常用,作爲了解即可。

double resNegative = Double.POSITIVE_INFINITY;
double resPositive = Double.NEGATIVE_INFINITY;
double resNaN = Double.NaN;
System.out.println(resNaN);
System.out.println(resNegative);
System.out.println(resPositive);

結果;

NaN
Infinity
-Infinity

注意;這三個數是常量!並且所有不是數值的值都認爲是不同的,所以這樣判斷一個變量是非數值的方法是錯誤的,如下;

if(a == Double.NaN){
	System.out.println("ok");
}else {
	System.out.println("error");
}
結果是error,應該使用Double的isNaN()方法;

if (!Double.isNaN(a)) {
	System.out.println("right");
}
結果是right。

下面看個例子,例;計算2-1.2的結果?再計算2-1.1的結果?

System.out.println(2.0 - 1.2);
System.out.println(2.0 - 1.1);
System.out.println(2.0 - 1.3);

結果;

0.8
0.8999999999999999(
不是應該是0.9麼?
0.7

爲什麼結果是這樣呢?

因爲java的浮點數是不適合禁止舍入的金融計算的,且浮點數採用二進制表示,而二進制(1、0)無法表示十進制的十分之一。用java的BigDecimal類即可,(後續)。


繼續走,該char類型了,首先必須弄明白unicode編碼表。

char類型表示單個字符,對應着unicode編碼的字符單元,使用\u來表示unicode代碼單元的編碼,範圍從\u0000-\uffff。當然還有很多其他的轉義字符,他們都可以出現在字符常量或者字符串的引號內,只有\u的轉移字符可以出現在引號外。

System.out.println('\u2122');
System.out.println("\u2122");
打印;


爲什麼會有unicode編碼呢?因爲這之前,對字符編碼美國的ASCII,歐洲的ISO 8859-1,中國的gb118030等等,使用起來標準不統一,麻煩重重,爲了解決這個問題,上世紀80年代開始研究,到91年正式發佈1.0版本。這些都是廢話,談起來涉及到大量編碼的專業知識,和主要矛盾關係不大,嘿嘿。只需要記住,java中非常的不建議使用char類型,最好是用抽象數據類型來表示。(以後再研究)


最後一類;布爾類型boolean。他有兩個值;true和false,判斷邏輯條件,並且整型和布爾值不能轉化。如下不要混淆。

if (x = 0) {
	System.out.println("ture");
}
這樣的話編譯都不能通過,編譯錯誤,因爲整型和布爾在java不能轉化。但是類似的寫法在c++裏是可以的,非0爲真,0爲假。

-----------------------------------------------------------------------------------------------------------------------------------

以上爲粗淺的學習和複習,旨在幫助後日若遺忘的時候可以查看和查漏補缺。未完待續……



發佈了26 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章