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