数据类型总结(干货)
Java中的數(shù)據(jù)類(lèi)型和C++的數(shù)據(jù)類(lèi)型基本是一致的,本來(lái)以為不需要怎么看,后來(lái)發(fā)現(xiàn)還是有些地方需要好好總結(jié)一下。
基本的就不說(shuō)了,直接上干貨。
我總結(jié)了下,數(shù)據(jù)類(lèi)型的轉(zhuǎn)換和賦值有以下幾點(diǎn)是比較麻煩的:
1、整數(shù)直接量可以直接賦值給byte,short,char,但不能超出范圍。
1 byte a1=127;//編譯正確 2 byte a2=128;//會(huì)報(bào)錯(cuò) Type mismatch: cannot convert from int to byte 3 short a3=32767;//編譯正確 4 short a4=32768;//會(huì)報(bào)錯(cuò) Type mismatch: cannot convert from int to short 5 char a5=65535;//編譯正確 6 char a6=65536;//會(huì)報(bào)錯(cuò) Type mismatch: cannot convert from int to char從上面可以看出,證書(shū)直接量只要不超過(guò)byte、short、char的范圍,是可以直接對(duì)其進(jìn)行賦值的。值得注意的是,char和short雖然都是16位,但是char是無(wú)符號(hào),范圍為0~65535,而short是有符號(hào),范圍為-32768~32767。
2、同種類(lèi)型的變量互相賦值,即使賦值右側(cè)值是超出其數(shù)據(jù)類(lèi)型范圍的,編譯器同樣不會(huì)報(bào)錯(cuò),而是會(huì)截取低位。
1 byte a1=127; 2 byte a2=(byte)(a1+1); 3 System.out.println(a2);以上代碼運(yùn)行結(jié)果為-128.原因是127+1=128超出了byte的范圍-128~127,作為一個(gè)閉環(huán),127后面一個(gè)數(shù)應(yīng)該是-128。(實(shí)際上就是再加1,位數(shù)不夠了,重新截取后為128,不過(guò)是補(bǔ)碼)
至于為什么要在a1+1之前用byte,后面會(huì)有總結(jié)。
3、不同種類(lèi)的變量互相賦值,小的數(shù)據(jù)類(lèi)型會(huì)自動(dòng)轉(zhuǎn)換為大的數(shù)據(jù)類(lèi)型,數(shù)據(jù)類(lèi)型從小到大依次為:byte<short(char)<int<long<float<double,其中short和char由于都是兩個(gè)字節(jié),因此其數(shù)據(jù)類(lèi)型的大小是相同的。還有一點(diǎn)需要提一點(diǎn)的是,第2點(diǎn)同樣適用于第三點(diǎn),賦值右側(cè)的值超出左側(cè)數(shù)據(jù)類(lèi)型的范圍,編譯器不會(huì)報(bào)錯(cuò),而是會(huì)截取低位。
1 byte byteType=100; 2 short shortType=byteType; 3 int intType=shortType; 4 long longType=intType; 5 float floatType=longType; 6 double doubleType=floatType;上述代碼都是正確的,都是從小類(lèi)型自動(dòng)轉(zhuǎn)換為大類(lèi)型。
但是!!!
1 char charType=byteType;//報(bào)錯(cuò) Type mismatch: cannot convert from byte to char 2 charType=shortType;//報(bào)錯(cuò) Type mismatch: cannot convert from short to char 3 shortType=charType;//報(bào)錯(cuò) Type mismatch: cannot convert from char to short 4 intType=charType;//編譯正確可以看出,char在自動(dòng)轉(zhuǎn)換過(guò)程是有特殊情況的,byte數(shù)據(jù)類(lèi)型雖然沒(méi)有char數(shù)據(jù)類(lèi)型大,但是它不能自動(dòng)轉(zhuǎn)換,char和short一樣大,也不能進(jìn)行自動(dòng)轉(zhuǎn)化,char繼續(xù)往上就可以自動(dòng)轉(zhuǎn)換了。
4、byte,short,char型數(shù)據(jù)參與運(yùn)算時(shí),先一律轉(zhuǎn)換為int再運(yùn)算
1 byte a1=100; 2 byte a2; 3 a2=100*1;//編譯正確 4 a2=100*6;//報(bào)錯(cuò) Type mismatch: cannot convert from int to byte 5 a2=a1+1;//報(bào)錯(cuò) Type mismatch: cannot convert from int to byte 6 a2=(byte)(a1+1);//編譯正確從第3行和第4行可以看出,當(dāng)賦值側(cè)右側(cè)為直接量的運(yùn)算,那么右側(cè)仍然算直接量,那么規(guī)則和1一樣,只要不超出賦值左側(cè)范圍即可。
當(dāng)賦值側(cè)右側(cè)有變量參與運(yùn)算,那么無(wú)論是+-*/,都會(huì)先將運(yùn)算符兩側(cè)的數(shù)據(jù)轉(zhuǎn)換為int再進(jìn)行運(yùn)算,得到的結(jié)果也自然是int,當(dāng)把int轉(zhuǎn)換為byte、short或者char時(shí),自然需要強(qiáng)制轉(zhuǎn)換。
轉(zhuǎn)載于:https://www.cnblogs.com/haojiejiejie/p/8583598.html
總結(jié)
以上是生活随笔為你收集整理的数据类型总结(干货)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 学习笔记(十一)——数据库的索引碎片、计
- 下一篇: 毕业设计后续工作目标