數(shù)據(jù)類型轉(zhuǎn)換默認(rèn)轉(zhuǎn)換
+是一個(gè)運(yùn)算符, 我們應(yīng)該能夠看懂项贺,做數(shù)據(jù)的加法。
boolean類型不能轉(zhuǎn)換為其他的數(shù)據(jù)類型
默認(rèn)轉(zhuǎn)換
byte,short,char—int—long—float—double
byte,short,char相互之間補(bǔ)轉(zhuǎn)換精刷,他們參與運(yùn)算首先轉(zhuǎn)換為int類型
/*+是一個(gè)運(yùn)算符(我們等會(huì)講解)。做加法運(yùn)算的抠忘。一般來(lái)說杜秸,我們?cè)谶\(yùn)算的時(shí)候,要求參與運(yùn)算的數(shù)據(jù)類型必須一致抑党。注意:boolean類型不能轉(zhuǎn)換為其他的數(shù)據(jù)類型默認(rèn)轉(zhuǎn)換(從小到大的轉(zhuǎn)換)A:byte,short,char—int—long—float—doubleB:byte,short,char相互之間不轉(zhuǎn)換包警,他們參與運(yùn)算首先轉(zhuǎn)換為int類型*/classDataTypeDemo3{publicstaticvoidmain(String[] args){//直接輸出的方式做加法//System.out.println(3 + 4);//兩個(gè)int類型做加法intx =3;inty =4;intz = x + y;System.out.println(z);//定義一個(gè)byte類型,一個(gè)int類型底靠,做加法bytea =3;intb =4;System.out.println(a + b);//可能損失精度//byte c =? a + b;intc = a + b;System.out.println(c);}}
目標(biāo)類型 變量名=(目標(biāo)類型)(被轉(zhuǎn)換的數(shù)據(jù));
/*強(qiáng)制轉(zhuǎn)換:從大的數(shù)據(jù)類型到小的數(shù)據(jù)類型揽趾。格式:目標(biāo)數(shù)據(jù)類型變量= (目標(biāo)數(shù)據(jù)類型) (被轉(zhuǎn)換的數(shù)據(jù));注意:不要隨意的去使用強(qiáng)制轉(zhuǎn)換,因?yàn)樗[含了精度損失問題苛骨。*/classDataTypeDemo4{publicstaticvoidmain(String[] args){bytea =3;intb =4;//這個(gè)肯定沒有問題//int c = a + b;//byte c = 7;//這個(gè)是有問題的//byte c = a + b; //用強(qiáng)制類型轉(zhuǎn)換改進(jìn)bytec = (byte) (a + b);System.out.println(c);}}
/*思考題1:請(qǐng)問下面這個(gè)有沒有問題double d = 12.345;float f = d;思考題2:看看下面兩個(gè)定義有沒有區(qū)別呢?float f1 = (float)12.345;float f2 = 12.345f;f1其實(shí)是通過一個(gè)double類型轉(zhuǎn)換過來(lái)的篱瞎。而f2本身就是一個(gè)float類型。*/classDataTypeDemo5{publicstaticvoidmain(String[] args){//把double賦值給float痒芝,加了強(qiáng)制類型轉(zhuǎn)換doubled =12.345;floatf = (float)d;//看看下面兩個(gè)定義有沒有區(qū)別呢?floatf1 = (float)12.345;floatf2 =12.345F;}}
/*面試題:byte b1=3,b2=4,b;b=b1+b2;b=3+4;哪句是編譯失敗的呢俐筋?為什么呢?b = b1 + b2;是有問題的严衬。因?yàn)樽兞肯嗉映握撸瑫?huì)首先看類型問題,最終把結(jié)果賦值的也會(huì)考慮類型問題请琳。常量相加粱挡,首先做加法,然后看結(jié)果是否在賦值的數(shù)據(jù)類型范圍內(nèi)俄精,如果不是询筏,才報(bào)錯(cuò)。*/classDataTypeDemo6 {public static void main(String[] args) {//定義了三個(gè)byte類型的變量竖慧,b1嫌套,b2,b3//b1的值是3圾旨,b2的值是4踱讨,b沒有值byte b1 =3,b2 =4,b;//b =b1 +b2; //這個(gè)是類型提升,所有有問題b =3+4; //常量砍的,先把結(jié)果計(jì)算出來(lái)痹筛,然后看是否在byte的范圍內(nèi),如果在就不報(bào)錯(cuò)。}}
/*byte b = 130;有沒有問題?如果我想讓賦值正確帚稠,可以怎么做?結(jié)果是多少呢?練習(xí):byte b = (byte)300;*/classDataTypeDemo7{publicstaticvoidmain(String[] args){//因?yàn)閎yte的范圍是:-128到127产雹。//而130不在此范圍內(nèi),所以報(bào)錯(cuò)翁锡。//byte b = 130; //我們可以使用強(qiáng)制類型轉(zhuǎn)換byteb = (byte)130;//結(jié)果是多少呢?System.out.println(b);}}/*分析過程:我們要想知道結(jié)果是什么蔓挖,就應(yīng)該知道是如何進(jìn)行計(jì)算的。而我們又知道計(jì)算機(jī)中數(shù)據(jù)的運(yùn)算都是補(bǔ)碼進(jìn)行的馆衔。而要得到補(bǔ)碼瘟判,首先要計(jì)算出數(shù)據(jù)的二進(jìn)制。A:獲取130這個(gè)數(shù)據(jù)的二進(jìn)制角溃。00000000 00000000 00000000 10000010這是130的原碼拷获,也是反碼,還是補(bǔ)碼减细。B:做截取操作匆瓜,截成byte類型的了。10000010這個(gè)結(jié)果是補(bǔ)碼未蝌。C:已知補(bǔ)碼求原碼驮吱。符號(hào)位數(shù)值位補(bǔ)碼:10000010反碼:10000001原碼:11111110*/
/*看程序?qū)懡Y(jié)果通過字符和一個(gè)整數(shù)相加,我們給出一張表:ASCII碼表萧吠。通過看完這張表以后左冬,我們要記住三個(gè)值:'a'97'A'65'0'48*/classDataTypeDemo8{publicstaticvoidmain(String[] args){//直接輸出一個(gè)字符System.out.println('a');//a//輸出一個(gè)字符和一個(gè)整數(shù)做加法System.out.println('a'+1);//98}}
/*看程序?qū)懡Y(jié)果字符串?dāng)?shù)據(jù)和其他數(shù)據(jù)做+,結(jié)果是字符串類型纸型。這里的+不是加法運(yùn)算拇砰,而是字符串連接符。*/classDataTypeDemo9{publicstaticvoidmain(String[] args){System.out.println("hello"+'a'+1);//helloa1System.out.println('a'+1+"hello");//98helloSystem.out.println("5+5="+5+5);//5+5=55System.out.println(5+5+"=5+5");//10=5+5}}