Java的數(shù)據(jù)類型包含基礎(chǔ)數(shù)據(jù)類型惊楼、引用數(shù)據(jù)類型兩大類。</br>
一秸讹、四大類八個(gè)基礎(chǔ)數(shù)據(jù)類型
Java語言提供了八種基本類型檀咙。四種數(shù)字類型(四個(gè)整數(shù)型(默認(rèn)是int 型),兩個(gè)浮點(diǎn)型(默認(rèn)是double 型))璃诀,一種字符類型弧可,還有一種布爾型。
1劣欢、byte:
byte數(shù)據(jù)類型是8位棕诵、有符號(hào)的,以二進(jìn)制補(bǔ)碼表示的整數(shù)凿将,占1字節(jié)校套。取值區(qū)間-128(-27)~127(27-1)),默認(rèn)值是0牧抵,對(duì)應(yīng)的Java引用類型是java.lang.Byte笛匙。
byte類型用在大型數(shù)組中節(jié)約空間,主要代替整數(shù)犀变,因?yàn)閎yte變量占用的空間只有int類型的四分之一妹孙。
例子:byte a = 100,byte b = -50获枝。
2蠢正、short:
short數(shù)據(jù)類型是16位、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù)省店,占2字節(jié)嚣崭。取值范圍-32768(-215)~32767(215 - 1),默認(rèn)值是0萨西,對(duì)應(yīng)的Java引用數(shù)據(jù)類型java.lang.Short有鹿。
short數(shù)據(jù)類型也可以像byte那樣節(jié)省空間。一個(gè)short變量是int型變量所占空間的二分之一谎脯。
例子:
short s = 1000葱跋,short r = -20000。
short s = 1;s+=1;(正確,s+=1 ==> s=(short)(s+1))
short s = 1;s =s+1;(錯(cuò)誤娱俺,s+1會(huì)被強(qiáng)制轉(zhuǎn)換為int類型稍味,而s是一個(gè)short類型,故錯(cuò)誤)
3荠卷、int:
int數(shù)據(jù)類型是32位模庐、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù),占4字節(jié)油宜,取值范圍-2,147,483,648(-231)~2,147,485,647(231 - 1)掂碱,整型變量默認(rèn)為int類型,默認(rèn)值是0慎冤,對(duì)應(yīng)的Java引用數(shù)據(jù)類型java.lang.Integer疼燥。
例子:int a = 100000, int b = -200000。
4蚁堤、long:
long數(shù)據(jù)類型是64位醉者、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù),占8字節(jié)披诗,取值范圍-9,223,372,036,854,775,808(-263)~9,223,372,036,854,775,807(263 -1)撬即,這種類型主要使用在需要比較大整數(shù)的系統(tǒng)上,默認(rèn)值是0L呈队,對(duì)應(yīng)的Java引用類型java.lang.Long剥槐。
例子:
long a = 100000L,int b = -200000L掂咒。
long a=111111111111111111111111(錯(cuò)誤椿胯,整數(shù)型變量默認(rèn)是int型)
long a=111111111111111111111111L(正確民珍,強(qiáng)制轉(zhuǎn)換)
5叮雳、float:
float數(shù)據(jù)類型是單精度语淘、32位、符合IEEE 754標(biāo)準(zhǔn)的浮點(diǎn)數(shù)孩革,占4字節(jié)岁歉,取值范圍1.40129846432481707E-45f ~ 3.40282346638528860E38f,浮點(diǎn)數(shù)是有舍入誤差的膝蜈,float在儲(chǔ)存大型浮點(diǎn)數(shù)組的時(shí)候可節(jié)省內(nèi)存空間锅移,默認(rèn)值是0.0f,對(duì)應(yīng)的Java引用類型java.lang.Float饱搏。
例子:
float f1 = 234.5f非剃。
float f=6.26(錯(cuò)誤 浮點(diǎn)數(shù)默認(rèn)類型是double類型)
float f=6.26F(轉(zhuǎn)換正確,強(qiáng)制)
6推沸、double
double數(shù)據(jù)類型是雙精度备绽、64位券坞、符合IEEE 754標(biāo)準(zhǔn)的浮點(diǎn)數(shù),占8字節(jié)肺素,
浮點(diǎn)數(shù)的默認(rèn)類型為double類型恨锚,取值范圍 4.9E-324 ~ 1.7976931348623157E+308 ,默認(rèn)值是0.0倍靡,對(duì)應(yīng)的Java引用類型java.lang.Double</br>
例子:
double d1 = 123.4猴伶。
float f=6.26(錯(cuò)誤 浮點(diǎn)數(shù)默認(rèn)類型是double類型)
7、boolean:
boolean數(shù)據(jù)類型表示一位的信息塌西,只有兩個(gè)取值:true和false他挎,這種類型只作為一種標(biāo)志來記錄true/false情況,默認(rèn)值是false雨让,對(duì)應(yīng)的Java引用類型java.lang.Boolean
例子:boolean one = true雇盖。
8忿等、char:
char類型是一個(gè)單一的16位Unicode字符栖忠,用 ‘ ’表示一個(gè)字符。java 內(nèi)部使用Unicode字符集贸街。他有一些轉(zhuǎn)義字符 庵寞,占2字節(jié),取值范‘\u0000’~’\uffff’薛匪,默認(rèn)值’/u0000‘捐川,對(duì)應(yīng)的Java引用類型java.lang.Character
例子:
char a = 'a';</br>
二逸尖、引用數(shù)據(jù)類型
引用數(shù)據(jù)類型主要包含class古沥、interface、數(shù)組等等娇跟。
引用數(shù)據(jù)類型和基礎(chǔ)數(shù)據(jù)類型的區(qū)別:
基礎(chǔ)數(shù)據(jù)類型保存在棧中岩齿,保存的是實(shí)際值,引用數(shù)據(jù)類型也保存在棧中苞俘,保存的是一個(gè)實(shí)際對(duì)象地址盹沈,將具體的內(nèi)容保存在堆中;它們占用空間大小和存取速度不同吃谣;當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值乞封,對(duì)象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)岗憋;當(dāng)傳遞方法參數(shù)類型為引用數(shù)據(jù)類型時(shí)肃晚,一個(gè)方法將修改一個(gè)引用數(shù)據(jù)類型的參數(shù)所指向?qū)ο蟮闹担?dāng)傳遞方法參數(shù)類型為基本數(shù)據(jù)類型(數(shù)字以及布爾值)時(shí)仔戈,一個(gè)方法是不可能修改一個(gè)基本數(shù)據(jù)類型的參數(shù)关串。</br>
三惋鸥、案例
public class JavaLearnOne {
public static void main(String args[]) {
int a = 1;
JavaLearnOne one = new JavaLearnOne();
one.changeParamsA(a);
System.out.println("main:" + a);
CallValue callValue = new CallValue();
callValue.setA(10);
System.out.println("callValue:" + callValue.getA());
one.updateCallValue(callValue);
System.out.println("callValue update:" + callValue.getA());
}
public void updateCallValue(CallValue value) {
value.setA(1000);
}
public void changeParamsA(int a) {
a = 1000;
}
}
class CallValue {
private int a;
public void setA(int a) {
this.a = a;
}
public int getA() {
return this.a;
}
}
以上輸出結(jié)果:
main:1
callValue:10
callValue update:1000
說明:
當(dāng)傳遞方法參數(shù)類型為基本數(shù)據(jù)類型(數(shù)字以及布爾值)時(shí),一個(gè)方法是不可能修改一個(gè)基本數(shù)據(jù)類型的參數(shù)(傳遞的是值副本)悍缠,因此在changeParamsA中修改的只是參數(shù)值的副本卦绣,java程序設(shè)計(jì)語言是采用了按值調(diào)用,即call by value飞蚓。也就是說方法得到的是所有參數(shù)值的一個(gè)拷貝滤港,方法并不能修改傳遞給它的任何參數(shù)變量的內(nèi)容。
當(dāng)傳遞方法參數(shù)類型為引用數(shù)據(jù)類型時(shí)趴拧,一個(gè)方法將修改一個(gè)引用數(shù)據(jù)類型的參數(shù)所指向?qū)ο蟮闹到ρ0咐械膱?zhí)行過程:
1、對(duì)象執(zhí)行updateCallValue方法時(shí)著榴,value被初始化為callValue的拷貝
2添履、調(diào)用value的setA方法是,value和callValue的CallValue對(duì)象同時(shí)被修改脑又。
3暮胧、方法結(jié)束后,value將不會(huì)再使用问麸,被釋放往衷,而callValue繼續(xù)使用,沒有變化严卖,依然指向CallValue對(duì)象席舍。