網(wǎng)站建設(shè)的業(yè)務(wù)范圍手游推廣個(gè)人合作平臺(tái)
1.概述
佛說(shuō),大千世界,無(wú)奇不有。在這個(gè)世界里,物種的多樣性,遍地開(kāi)花,同樣,在Java的世界里,也有著異曲同工之妙,Java秉承面向?qū)ο蟮奶匦?#xff0c;必然少不了區(qū)分對(duì)象的類(lèi)型,就像下圖的“CuteCat”,它描述著在現(xiàn)實(shí)世界中存在的事物,同時(shí)也是今天我們要說(shuō)的Java數(shù)據(jù)類(lèi)型。
Java中的數(shù)據(jù)類(lèi)型可劃分為兩種:
1)基本數(shù)據(jù)類(lèi)型
基本數(shù)據(jù)類(lèi)型是Java語(yǔ)言中數(shù)據(jù)操作的基礎(chǔ),包括
byte
、short
、int
、long
、float
、double
、char
、boolean
。
2)引用數(shù)據(jù)類(lèi)型
引用數(shù)據(jù)類(lèi)型包括類(lèi)(class)、接口(interface)、數(shù)組。
如果只看文字描述的話,可能沒(méi)有那么直觀,上圖自己體會(huì)。
那么首先來(lái)看看基本數(shù)據(jù)類(lèi)型,不同的數(shù)據(jù)類(lèi)型有著不同的默認(rèn)值以及取值范圍,既然取值范圍不同,其所占用的內(nèi)存空間也是不同的。來(lái)看下表:
數(shù)據(jù)類(lèi)型 | 默認(rèn)值 | 取值范圍 | 內(nèi)存占用 |
---|---|---|---|
byte | 0 | -128127(-2^72^7-1) | 1字節(jié)(8位) |
short | 0 | -3276832767(-2^152^15-1) | 2字節(jié)(16位) |
int | 0 | -2,147,483,6482,147,483,647(-2^312^31-1) | 4字節(jié)(32位) |
long | 0L | -263~263-1 | 8字節(jié)(64位) |
float(單精度) | 0.0f | 1.4E-45~3.4028235E+38 | 4字節(jié)(32位) |
double(雙精度) | 0.0d | 4.9E-324~1.7976931348623157E+308 | 8字節(jié)(64位) |
char | ‘\u0000’ | ‘\u0000’(十進(jìn)制0)~‘\uFFFF’(十進(jìn)制65535) | 2字節(jié)(16位) |
boolean | false | true、false | 1字節(jié)(8位) |
2.基本數(shù)據(jù)類(lèi)型
通過(guò)上面的介紹,相信大家對(duì)基本數(shù)據(jù)類(lèi)型已經(jīng)有一個(gè)大致的了解,接下來(lái)繼續(xù)詳細(xì)說(shuō)明。
2.1 byte
byte類(lèi)型屬于整型,最小值為-128,最大值為127,默認(rèn)值為0,內(nèi)存占用為1字節(jié)。在編寫(xiě)程序時(shí),如果可以確定變量的取值范圍,為了節(jié)省空間,可以使用byte來(lái)存儲(chǔ)數(shù)據(jù)。代碼示例:
byte b1 = -128;
byte b2 = 127;
2.2 short
short類(lèi)型屬于整型,最小值為-32768,最大值為32767,默認(rèn)值為0,內(nèi)存占用為2字節(jié)。代碼示例:
short s1 = -32768;
short s2 = 32767;
2.3 int
int類(lèi)型屬于整型,最小值為-2,147,483,648,最大值為2,147,483,647,默認(rèn)值為0,內(nèi)存占用為4字節(jié)。代碼示例:
int i1 = -2,147,483,648;
int i2 = 2,147,483,647;
2.4 long
long類(lèi)型屬于整型,最小值為-9,223,372,036,854,775,808,最大值為-9,223,372,036,854,775,807,默認(rèn)值為0,內(nèi)存占用為8字節(jié)。代碼示例:
long l1 = -9,223,372,036,854,775,808;
long l2 = 9,223,372,036,854,775,807;
2.5 float
float類(lèi)型屬于單精度浮點(diǎn)型,小數(shù)點(diǎn)有效位數(shù)為7位,最小值為1.4E-45,最大值為3.4028235E+38,默認(rèn)值為0.0f,內(nèi)存占用為4字節(jié)。示例代碼:
float f = 1.1f;
2.6 double
double類(lèi)型屬于雙精度浮點(diǎn)型,小數(shù)點(diǎn)的有效位數(shù)為16位,最小值為4.9E-324,最大值為1.7976931348623157E+308,默認(rèn)值為0.0,內(nèi)存占用為8字節(jié)。
double d = 1.1;
2.7 char
char類(lèi)型可以表示一個(gè)16位的Unicode字符,最大值為’\uFFFF’(十進(jìn)制65535),最小值為’\u0000’(十進(jìn)制0),內(nèi)存占用為2字節(jié)。代碼示例:
char c = 'A';
**Tips:**編碼類(lèi)型不同,一個(gè)字符所在的內(nèi)存空間也就不同。
-
ASCII編碼:一個(gè)英文字符占一個(gè)字節(jié),一個(gè)中文字符占兩個(gè)字節(jié)。
-
Unicode編碼:一個(gè)英文字符和一個(gè)中文字符占都兩個(gè)字節(jié)。
-
utf8編碼:一個(gè)英文字符占一個(gè)字節(jié),一個(gè)中文字符占三個(gè)字節(jié)。
2.8 boolean
boolean類(lèi)型的值分別為true、false,通常用于條件判斷。代碼示例:
boolean flag = true;
3.基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換
3.1 為什么需要類(lèi)型轉(zhuǎn)換
類(lèi)型轉(zhuǎn)換?為什么Java基本數(shù)據(jù)類(lèi)型之間會(huì)涉及到類(lèi)型轉(zhuǎn)換呢?
試想一下在現(xiàn)實(shí)世界中,如果將一個(gè)蘋(píng)果和一個(gè)梨拿來(lái)比較,由于蘋(píng)果和梨是兩個(gè)不同的類(lèi)型,自然是無(wú)法進(jìn)行比較的。同理,Java是強(qiáng)類(lèi)型語(yǔ)言,所以要求在執(zhí)行賦值運(yùn)算和算術(shù)運(yùn)算的時(shí)候,參與運(yùn)算的數(shù)據(jù)類(lèi)型必須保持一致。
3.2 哪些基本數(shù)據(jù)類(lèi)型可以相互轉(zhuǎn)換
除了boolean類(lèi)型,其余的數(shù)據(jù)類(lèi)型在內(nèi)存中存儲(chǔ)的都是數(shù)值,因此,除了Boolean類(lèi)型,其余的數(shù)據(jù)類(lèi)型之間都可以相互轉(zhuǎn)換。
3.3 類(lèi)型轉(zhuǎn)換方式
- 隱式類(lèi)型轉(zhuǎn)換
取值范圍小的數(shù)據(jù)類(lèi)型向取值范圍大的數(shù)據(jù)類(lèi)型轉(zhuǎn)換時(shí),可以自動(dòng)轉(zhuǎn)換,也叫隱式類(lèi)型轉(zhuǎn)換,有種大魚(yú)吃小魚(yú)的感覺(jué)。示例代碼:
byte b =127;
short s = b;
int i = s;
long l = i;
float f = l;
double d = f;
如果是進(jìn)行算數(shù)運(yùn)算,也會(huì)進(jìn)行類(lèi)型自定轉(zhuǎn)換:
1、如果其中一個(gè)數(shù)是double類(lèi)型,其余的數(shù)也會(huì)轉(zhuǎn)換為double類(lèi)型。
2、如果其中一個(gè)數(shù)是float類(lèi)型,其余的數(shù)也會(huì)轉(zhuǎn)換為float類(lèi)型。
3、如果其中一個(gè)數(shù)是long類(lèi)型,其余的數(shù)也會(huì)轉(zhuǎn)換為long類(lèi)型。
我們?cè)賮?lái)看看這幾種基本類(lèi)型之間的隱式轉(zhuǎn)換關(guān)系,實(shí)線表示無(wú)精度丟失,虛線表示可能會(huì)出現(xiàn)精度丟失。比如1234567890是一個(gè)10位的int類(lèi)型的整數(shù),它包含的位數(shù)比f(wàn)loat類(lèi)型所能夠表達(dá)的位數(shù)多,在進(jìn)行轉(zhuǎn)換時(shí)就會(huì)出現(xiàn)精度丟失。
- 強(qiáng)制類(lèi)型轉(zhuǎn)換
取值范圍大的數(shù)據(jù)類(lèi)型向取值范圍小的數(shù)據(jù)類(lèi)型轉(zhuǎn)換時(shí),無(wú)法進(jìn)行自動(dòng)轉(zhuǎn)換,需要我們?yōu)槠渲付@式的類(lèi)型轉(zhuǎn)換。進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換容易造成數(shù)據(jù)異常,就像小魚(yú)吃大魚(yú)一樣,如果硬把大魚(yú)塞給小魚(yú)吃,那必然是對(duì)小魚(yú)的巨大破壞。代碼示例:
long l = 9223372036854775807L;
int i = (int) l;// i的值為-1。
**Tips:**整型之間的隱式轉(zhuǎn)換不會(huì)出現(xiàn)精度的丟失,整型和浮點(diǎn)型之間的類(lèi)型轉(zhuǎn)換可能會(huì)出現(xiàn)精度丟失。