2.2-全棧Java筆記:常用的三類八種基本數(shù)據(jù)類型

基本數(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容