2019 數(shù)據(jù)類型

數(shù)據(jù)類型

一、什么是數(shù)據(jù)類型

????1.百度百科: 數(shù)據(jù)類型在數(shù)據(jù)結(jié)構(gòu)中的定義是一個值的集合以及定義在這個值集上的一組操作。

????????簡單理解 : ?Java對數(shù)據(jù)進行了分類,存在不同的類型

????????為什么需要數(shù)據(jù)分類:不同的數(shù)據(jù)類型占用的存儲空間不一樣,為了更好的利用計算機內(nèi)存 空間,防止出現(xiàn)小數(shù)據(jù)存在大數(shù)據(jù)類型導(dǎo)致浪 ?費空間的情況(存入的數(shù)據(jù)是以二進制的形式 放入存儲空間的:01010101010101010101010101010101)

????2.在 Java 的領(lǐng)域里,

????????基本數(shù)據(jù)類型變量(包括整數(shù)[byte、short、int、long]}、浮點型[float、double]、字符型[char]、布爾類型[boolean]): ?存的是數(shù)據(jù)值本身

????????引用數(shù)據(jù)類型變量: ?存的是保存數(shù)據(jù)的內(nèi)存空間地址,輸出時輸出的是數(shù)據(jù)。

????????學(xué)習(xí)數(shù)據(jù)類型基本認(rèn)識:

????????Java中每個變量都有一種類型,數(shù)據(jù)類型限制變量能用的存儲空間,所以可以存入的值也是有范圍的

????????????示例:比如byte數(shù)據(jù)類型能存的值在-128~127之間,超過就沒法存

二、進制

????1.進制的概念

????????(1)10進制 (逢10進1)(計數(shù)) ?在我們生活中最常用,同樣,在我們寫代碼中也最常用。

????????????其中的符號可以是 :1 2 3 4 5 6 7 8 9 0

????????(2)2進制 ?(逢2進1) ?

????????????其中的符號可以是: 1 0

????????(3)8進制 (逢8進1)

????????????其中的符號可以是: 0 1 2 3 4 5 6 7?

????????(4)16進制(逢16進1)?

????????????其中的符號可以是:

????????????0 1 2 3 4 5 6 7 8 9 A(10) B(11) C(12) D(13) E(14) F(15)?

????????????????示例:2A ?

三、基本數(shù)據(jù)類型(8種)

????1.計算機中的存儲單位

????????1024T

????????1T = 1024G

????????1G = 1024MB

????????1M = 1024KB

????????1KB=1024Byte

????????1Byte = 8 bit【1個bit就是一個二進制位】

????2.整型數(shù)據(jù)byte ?short ?int ? long

????????為什么會有不同大小的類型,舉個例子比如存 5 這個數(shù)據(jù)怎么存的?

????????byte(8位,范圍是-128到127)

????????short(16位)

????????int(32位)

????????long (64位)

????????上面的byte short int long 最大長度可以通過jdk文檔去找到 具體的范圍。

????????如果值比long還大,怎么辦?

????????Java提供了一個類:BigInteger:用于處理較大整數(shù)

????????long賦值時,因為整數(shù)默認(rèn)是int類型,要轉(zhuǎn)換為long類型的值,后面加上l或L

????????同一個整數(shù)可以使用不同的進制表示:(System.out.println(0b101)需jdk1.7才能按照十進制輸出)

????????Java7 開始 支持?jǐn)?shù)字之間用 _ 分割(12_34_56輸出123456)

????3.浮點型 ? ?float ? ?double ?其實就是小數(shù)

????????float(單精度32位)

????????直接給變量賦值時必須在浮點類型數(shù)據(jù)后面加上f 或F

????????[ 表示該數(shù)據(jù)是一個浮點類型數(shù)據(jù) ]

????????double( 雙精度64位)

????????單精度雙精度區(qū)別:

????????(1)對于單精度浮點數(shù),運行速度相比double更快,占內(nèi)存更小,

????????????但是當(dāng)數(shù)值非常大或者非常小的時候會變得不精確。

????????(2)雙精度比單精度表示的位數(shù)大 精確的位數(shù)多,簡單地說, float表示的小數(shù)點位數(shù)少。

????????????默認(rèn)浮點數(shù)的類型是 double

????????????表現(xiàn)形式:

????????????常規(guī) ?

????????????例如 ?3.14 ?3.14f

????????????科學(xué)計數(shù)法

????????????例如 ?3.14e2 ?3.14*10^2 ? ? 3.14e-2

????????????注意:存入的數(shù)據(jù)會有精度損失 [ 使用浮點數(shù)的時候需要注意 ]

????????????例如 double num= 1.0, 是一個無限接近1.0的一個值

????????????結(jié)論:浮點運算很少是精確的,只要是超過精度能表示的范圍就會產(chǎn)生誤差。往往產(chǎn)生誤差不是 因為數(shù)的大小,而是因為數(shù)的精度。因此,產(chǎn)生的結(jié)果接近但不等于想要的結(jié)果。尤其在使用 float 和 double 作精確運 算的時候要特別小心。

????????????那怎么更精確的表示浮點數(shù)呢?

? ? ????????Java提供了一個類BigDecimal來表示更精準(zhǔn)的浮點數(shù)

????4.字符char?

????????什么是字符:單引號引起來的一個符號就是字符數(shù)據(jù) ? ?例如:'A'

????????存儲單位16 位[0-65535] ?[2個字節(jié),16位]。字符常量使用單引號 ''(英文狀態(tài)下)包裹起來。

????????表現(xiàn)形式:

????????'A'最常用,最直觀的方式

????????使用一個數(shù)字表示,對應(yīng)有一個ASCII碼表[ 字符編碼 ]

? ? ????????例如:char c = 65;//表示 'A' 這個字符

????????16進制表現(xiàn)形式

????????'A'->65(10進制)

?????????'A'->0x41(16進制)怎么表示? '\u0041'

????????特殊符號(需要使用轉(zhuǎn)義符號轉(zhuǎn)義)

?????????\' ? \" ? \\ ? \r(回車) ?\n(換行) \t(制表符Tab)

????????字符數(shù)據(jù)可以當(dāng)成一個整數(shù)來使用,

????????什么是ASCII表,就像化學(xué)元素周


????5.布爾類型boolean

????????值只有兩個 true false,不能使用 0 1表示

四、 引用類型

????1.引用類型String

????????String是 java中已經(jīng)設(shè)計好的一個類,表示的值是字符串,是字符串?dāng)?shù)據(jù)類型

????????[注意:Java中設(shè)計的類和我們自己設(shè)計的類的性質(zhì)是一樣的]

????????常見形式:String s = "你好";

????????當(dāng)String 和 + 一起使用的時候,這時候+ 是拼接字符串的功能

????????System.out.println("你好"+2);//結(jié)果為 ? ?你好2

????????int a ?= 5;

????????int b = 10

????????System.out.println("a="+a+",b="+b); //結(jié)果為a=5,b=10

????2.一個類其實就是一種引用數(shù)據(jù)類型

????????自己寫的一個類也是一種數(shù)據(jù)類型,類型為類名

????????我們自己寫的類和Java已經(jīng)寫好的,性質(zhì)一樣

五、 數(shù)據(jù)類型轉(zhuǎn)換

????????整型數(shù)據(jù)【值】 : 默認(rèn)類型為int類型 :例如:12默認(rèn)為int類型

????????小數(shù)數(shù)據(jù) : 默認(rèn)為double類型 :例如:3.14默認(rèn)為double類型


????????①自動類型轉(zhuǎn)換:小數(shù)據(jù)類型轉(zhuǎn)大數(shù)據(jù)類型【存儲空間的大小】

????????②強制類型轉(zhuǎn)換:

????????①大數(shù)據(jù)類型轉(zhuǎn)小數(shù)據(jù)類型[存儲空間大小]

? ? ? ? ②相同存儲空間不同類型表達值范圍不一樣[例如:char及short

????3.數(shù)據(jù)轉(zhuǎn)換說明

????????1.在Java中,boolean類型與所有其他7種類型都不能進行轉(zhuǎn)換。(byte short int long float double char)

????????2.如下7種數(shù)據(jù)類型,它們之間都可以進行轉(zhuǎn)換,但是可能會存在精度損失或者其他一些變化:

????????????byte short ,char ?int ?long float ?double

????????????①自動類型轉(zhuǎn)換: ?[short和char ,因值的范圍不同,不能自動轉(zhuǎn)換]其他都可以自動完成轉(zhuǎn)換

????????????②強制類型轉(zhuǎn)換: ?必須強制轉(zhuǎn)換。

????????思考:為什么float 在long 后面?

????????小數(shù)(浮點數(shù)) 的存儲方式,結(jié)構(gòu)和整數(shù)不一樣:知道就好無須深入研究..

????(1)自動轉(zhuǎn)換

????????1)數(shù)據(jù)類型過長 和 溢出

????????????byte b = 128;//超出byte范圍

????????????long intMax = int最大數(shù)(查jdk文檔)

????????2)long ?float ?double只要兩個操作數(shù)中有一個是上面類型的,另一個就會被轉(zhuǎn)換成相應(yīng)類型,并且結(jié)果也是該類型: 例如

????????????int ?num = 10;?

????????????double b = 10.01;

????????????double ?c = num + b;

????????????System.out.println(c);

????????3)如果2個操作數(shù)(包括byte,short,char,int),都將會轉(zhuǎn)換為int類型,并且結(jié)果也是int(自動向上轉(zhuǎn)型)

????????????short s = 10;

????????????int num = 20;

????????????int n = num + s;

????????????System.out.println(n);

? ??

????????????byte b=3; ? ??

????????????b=(byte)(b*3);//必須聲明byte。

????????????System.out.println(b);

????????4)char類型向更高長度類型(例如整型)轉(zhuǎn)換時,會轉(zhuǎn)換為對應(yīng)的ASCII碼值,再做其他類型的自動轉(zhuǎn)換

????????????例如:

????????????char ?c = 'A';?

????????????int num = 10;?

????????????int a = c+num;

????????????System.out.println(a); ? ? ? ? ? ? ? ? ? ? ? ? ??

????????需要注意的是:

????????????1.char型具有兩個字節(jié),其數(shù)值范圍是0 ~ 2^16-1,

????????????2.short類型也具有兩個字節(jié),其值的范圍是-2^15 ~ 2^15-1

????????????這直接導(dǎo)致byte型不能自動類型提升到char,char和short直接也不會發(fā)生自動類型提升(因為值范圍問題),同時,byte當(dāng)然可以直接提升到short型。?

????????????所以,char 不能和byte short 相互自動轉(zhuǎn)換

????????5)特例 :只看類型不看值

????????????示例1:

????????????int a = 129;

????????????byte b = (byte)a;//編譯器只看容器不看值

???????????System.out.println(b);//結(jié)果為-127

????????????示例2:

????????????byte ?b ?= ?100;//可以自動轉(zhuǎn)換

????????????float ? f = 1.3;//不能自動轉(zhuǎn)換

????????????int ?a = 2147483647;

????????????a = a+1;

????????????System.out.println(a); ?// 結(jié)果為 ?-2147483648

????(2)強制轉(zhuǎn)換

????????1.強制類型轉(zhuǎn)換的語法

????????數(shù)據(jù)類型 變量名 = (數(shù)據(jù)類型)值;//值可能是更高的類型

????????2.強制類型轉(zhuǎn)換的注意事項

????????????(1)高轉(zhuǎn)低會導(dǎo)致精度丟失,不同類型的強制轉(zhuǎn)換,可能會導(dǎo)致精度的下降.

????????????(2)實際開發(fā)中:應(yīng)該要知道被強制轉(zhuǎn)換的數(shù)據(jù),是在一個已知的范圍;

????????3.示例

????????????比如說:double 轉(zhuǎn) float ?

????????????示例一:

????????????int i1=123;

????????????int i2=456;?

????????????float f1 = (float) ((i1+i2)*1.2);//容量大的類型轉(zhuǎn)換為容量小的類型時,要加上強制轉(zhuǎn)換符

????????????示例二:

????????????short i=99;

????????????char c=(char)i; ?

????????????System.out.println(c); ?


????????????示例三:

????????????byte b1=1;

????????????byte b2=2;

????????????byte b3=(byte)(b1+b2); //byte,short,char在計算時首先轉(zhuǎn)換為int,大容//量(int)轉(zhuǎn)換為小容量的類型(byte)時要加強制轉(zhuǎn)換


????????????特 ?例:

????????????byte t = 127;//不報錯

????????????int a = 127;

????????????//需要強制轉(zhuǎn)換才不報錯:編譯器只看容器【只看類型】不看值

????????????byte b = (byte)a;System.out.println(b); // 結(jié)果為 127

最后編輯于
?著作權(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)容