基本數(shù)據(jù)類型(primitive? data? type)
?Java是一種強類型語言,每個變量都必須聲明其類型。
?Java的數(shù)據(jù)類型分為兩大類:基本類型(primitive type)和引用類型(reference type)
?Java中定義了3類8種基本數(shù)據(jù)類型
邏輯型-boolean
文本型-char
數(shù)值型-byte,? short,? int,? long, float,? double
注意事項
·引用數(shù)據(jù)類型的大小統(tǒng)一為4個字節(jié),記錄的是其引用對象的地址!我們學(xué)習(xí)面向?qū)ο蠛?,重點學(xué)習(xí)引用數(shù)據(jù)類型。
整型變量/
整形變量
整型用于表示沒有小數(shù)部分的數(shù)值,它允許是負(fù)數(shù)。
整型的范圍與運行Java代碼的機器無關(guān),這正是Java程序具有很強移植能力的原因之一。于此相反,C和C++程序需要針對不同的處理器選擇最有效的整形。
類型占用存儲空間表數(shù)范圍
Byte1字節(jié)-128~127
Short2字節(jié)-215~ 215-1 (-32768~32767)
Int4字節(jié)(-2147483648~2147483647) 約21億
Long8字節(jié)-263~ 263-1
1)Java語言整型常數(shù)的三種表示形式:
十進(jìn)制整數(shù),如:99, -500, 0。
八進(jìn)制整數(shù),要求以 0 開頭,如:015。
十六進(jìn)制數(shù),要求 0x 或 0X 開頭,如:0x15 。
2) Java語言的整型常數(shù)默認(rèn)為int型,聲明long型常量可以后加‘ l ’或‘ L ’,如:
long a = 55555555;? //不出錯,在Int表示的范圍內(nèi)(21億內(nèi))。
long b = 55555555555;//不加l出錯,已經(jīng)超過int表示的范圍。報錯:
報錯 The literal 55555555555 of type int is out of range
所以我們需要修改代碼為:
longb = 55555555555L;
浮點型變量/常量
帶小數(shù)的數(shù)據(jù)在Java中稱為浮點型。浮點型可分為float類型和double類型。
類型占用存儲空間表數(shù)范圍
Float4字節(jié)-3.403E38~3.403E38
Double8字節(jié)-1.798E308~1.798E308
1) float類型又被稱作單精度類型,尾數(shù)可以精確到7位有效數(shù)字,在很多情況下,float類型的精度很難滿足需求。
2) double表示這種類型的數(shù)值精度是float類型的兩倍,又被稱作雙精度,絕大部分應(yīng)用程序都采用double類型。
3) Java浮點類型常量有兩種表示形式
十進(jìn)制數(shù)形式,例如:?? ? ?3.14 ????? 314.0????? 0.314
科學(xué)記數(shù)法形式,如:?314e2????? 314E2????? 314E-2
【示例1】使用科學(xué)記數(shù)法給浮點型變量賦值
double?f = 314e2; ?//314*10^2-->31400.0
double?f2 = 314e-2; //314*10^(-2)-->3.14
4)Float類型的數(shù)值有一個后綴F/f ,沒有后綴F/f的浮點數(shù)值默認(rèn)為double類型。也可以在浮點數(shù)值后添加后綴D/d, 以明確其為double類型:
老鳥建議:
浮點類型float,double的數(shù)據(jù)不適合在不容許舍入誤差的金融計算領(lǐng)域。如果需要進(jìn)行不產(chǎn)生舍入誤差的精確數(shù)字計算,需要使用BigDecimal類。
【示例2】浮點數(shù)的比較一
floatf = 0.1f;
doubled = 1.0/10;
System.out.println(f==d);
【示例3】浮點數(shù)的比較二
floatd1 = 423432423f;
floatd2 = d1+1;
if(d1==d2){
System.out.println("d1==d2");
}else{
System.out.println("d1!=d2");
}
圖1示例2運行效果圖
圖2示例3運行效果圖
出現(xiàn)上圖所示的主要理由:由于字長有限,浮點數(shù)能夠精確表示的數(shù)是有限的,因而也是離散的。浮點數(shù)一般都存在舍入誤差,很多數(shù)字無法精確表示(例如0.1),其結(jié)果只能是接近,但不等于。二進(jìn)制浮點數(shù)不能精確的表示0.1、0.01、0.001這樣10的負(fù)次冪。并不是所有的小數(shù)都能可以精確的用二進(jìn)制浮點數(shù)表示。
Java.Math下面的兩個有用的類:BigInteger和BigDecimal,這兩個類可以處理任意長度的數(shù)值。BigInteger實現(xiàn)了任意精度的整數(shù)運算。BigDecimal實現(xiàn)了任意精度的浮點運算。
菜鳥雷區(qū):
不要使用浮點數(shù)進(jìn)行比較!很多新人甚至很多理論不扎實的有工作經(jīng)驗的程序員也會犯這個錯誤!需要比較請使用BigDecimal類
【示例4】使用BigDecimal進(jìn)行浮點數(shù)的比較
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal bd =?BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1);
bd = bd.subtract(BigDecimal.valueOf(0.1);
bd = bd.subtract(BigDecimal.valueOf(0.1);
bd = bd.subtract(BigDecimal.valueOf(0.1);
bd = bd.subtract(BigDecimal.valueOf(0.1);
Syetem.out.println(bd);
Syetem.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1);
}
}
浮點數(shù)使用總結(jié)
默認(rèn)是double類型
浮點數(shù)存在舍入誤差,數(shù)字不能精確表示。如果需要進(jìn)行不產(chǎn)生舍入誤差的精確數(shù)字計算,需要使用BigDecimal類。
避免比較中使用浮點數(shù),需要比較請使用BigDecimal類
字符型變量/常量
·字符型在內(nèi)存中占有2個字節(jié),在Java中使用單引號來表示字符常量。例如‘A’是一個字符,它與“A”是不同的,“A”表示含有一個字符的字符串。
·char 類型用來表示在Unicode編碼表中的字符。Unicode編碼被設(shè)計用來處理各種語言的所有文字,它占2個字節(jié),可允許有65536個字符。
【示例5】字符型舉例
char eChar = 'a';
char cChar ='中';
Unicode具有從0到65535之間的編碼,他們通常用從’\u0000’到’\uFFFF’之間的十六進(jìn)制值來表示(前綴為u表示Unicode)
【示例6】字符型的十六進(jìn)制值表示方法
char c = '\u0061';
Java 語言中還允許使用轉(zhuǎn)義字符 ‘\’ 來將其后的字符轉(zhuǎn)變?yōu)槠渌暮x。
【示例7】轉(zhuǎn)義字符
char c2 = '\n'; ?//代表換行符
轉(zhuǎn)義符含義Unicode值
\b退格(backspace)\u0008
\n換行\(zhòng)u000a
\r回車\u000d
\t制表符(tab)\u0009
\“雙引號\u0022
\‘單引號\u0027
\\反斜杠\u005c
注:以后我們學(xué)的String類,其實是字符序列(char sequence)。
bolean類型:
??boolean類型有兩個值,true和false,在內(nèi)存中占一位(不是一個字節(jié)),不可以 0 或非 0 的整數(shù)替代 true 和 false ,這點和C語言不同。
? boolean類型用來判斷邏輯條件,一般用于程序流程控制。
【示例8】boolean類型
boolean flag ;
flag = true; ??//或者flag=false;
if(flag) {
// true分支
} else {
// ?false分支
}
老鳥建議:
Less is More??!請不要這樣寫:if ( is == true && done == false ) ,只有新手才那么寫。
關(guān)鍵也很容易寫錯成if(is=true),這樣就變成賦值is為true而不是判斷!
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗,曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計及研發(fā)工作,從小白逐漸做到工程師、高級工程師、架構(gòu)師。精通Java平臺軟件開發(fā),精通JAVAEE,熟悉各種流行開發(fā)框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數(shù)據(jù)庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰(zhàn)
E-Java高級框架精解
F-Linux和Hadoop
F-Linux和Hadoop