數(shù)據(jù)類型轉(zhuǎn)換
java程序中要求參與的計(jì)算的數(shù)據(jù),必須保證數(shù)據(jù)類型的一致性,如果數(shù)據(jù)類型不一致將發(fā)生類型的轉(zhuǎn)換
自動(dòng)轉(zhuǎn)換
一個(gè)int類型變量和一個(gè)byte類型變量進(jìn)行加法運(yùn)算,結(jié)果回事什么數(shù)據(jù)類型?
1:int i = 1;? ? ? 2:byte b = 2;
運(yùn)算結(jié)果,變量的類型將是int類型,這就是出現(xiàn)了數(shù)據(jù)類型的自動(dòng)類型轉(zhuǎn)換現(xiàn)象。
自動(dòng)轉(zhuǎn)換:將取值范圍小的類型,自動(dòng)提升為取值范圍大的類型
數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換代碼? ? ? ? ? ? ? ? ? ? ? ? ? ? /*
*當(dāng)數(shù)量類型不一樣時(shí),將會(huì)發(fā)生數(shù)據(jù)類型轉(zhuǎn)換*
*自動(dòng)轉(zhuǎn)換類型(隱式)*? 1.? 特點(diǎn):代碼不需要進(jìn)行特殊處理,自動(dòng)完成*? 2.? 規(guī)則:數(shù)據(jù)范圍從小到大*
*強(qiáng)制轉(zhuǎn)換類型(顯式)* */
public class Demo01DataType {
public static void main(String[] args) {
System.out.println(1024); //這是一個(gè)整數(shù),默認(rèn)就int類型
? ? ? ? System.out.println(3.14); //這就是一個(gè)浮點(diǎn)數(shù),默認(rèn)就是double類型
? ? ? ? //左邊是long類型,右邊是默認(rèn)的int類型,左右不一樣
? ? ? ? //一個(gè)等號(hào)代表賦值,將右側(cè)的int常量,交給左側(cè)的long變量進(jìn)行存儲(chǔ)
? ? ? ? //int--> long,符合了數(shù)據(jù)范圍從小到大的要求
? ? ? ? //這一行代碼發(fā)生了自動(dòng)類型轉(zhuǎn)換
? ? ? ? long num1 =100;
? ? ? ? System.out.println(num1); //100
? ? ? ? //左邊是double類型,右邊是float類型,左右不一樣
? ? ? ? //float-->double,符合從小到大的規(guī)則
? ? ? ? //也發(fā)生了自動(dòng)類型變換
? ? ? ? double num2 =2.5F;
? ? ? ? System.out.println(num2); //2.5
? ? ? ? //左邊是float類型,右邊是long類型,左右不一樣
? ? ? ? //long-->float,范圍是float更大一些,符合從小到大的會(huì)澤
? ? ? ? //也發(fā)生了自動(dòng)類型轉(zhuǎn)換
? ? ? ? float num3 =30L;
? ? ? ? System.out.println(num3); //30.0
? ? }
}
數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換
將1.5賦值到int類型變量會(huì)發(fā)生什么?產(chǎn)生編譯失敗,肯定無法賦值。
1? int i = 1.5; //錯(cuò)誤
double類型內(nèi)存8個(gè)字節(jié),int類型內(nèi)存4個(gè)字節(jié)。1.5是double類型,取值范圍大于int??梢岳斫鉃閐ouble是8升的水壺,int是4升的水壺,不能把大水壺中的水直接放進(jìn)小水壺去。
想要賦值成功,只有通過強(qiáng)制類型轉(zhuǎn)換,將double類型強(qiáng)制轉(zhuǎn)換成int類型才能賦值。
強(qiáng)制類型轉(zhuǎn)換:將取值范圍大的類型強(qiáng)制轉(zhuǎn)換成取值范圍小的類型。
比較而言,自動(dòng)轉(zhuǎn)換是java自動(dòng)執(zhí)行的,而強(qiáng)制轉(zhuǎn)換需要我們自己手動(dòng)執(zhí)行
轉(zhuǎn)換格式:? 1? 數(shù)據(jù)類型? 變量名? =? (數(shù)據(jù)類型)被轉(zhuǎn)數(shù)據(jù)值
將1.5賦值到int類型,代碼改為:
1????//double類型數(shù)據(jù)強(qiáng)制轉(zhuǎn)換成int類型。直接去掉小數(shù)點(diǎn)。
2? ? int i = (int)1.5;
同樣道理,當(dāng)一個(gè)short類型與1相加,我們知道會(huì)類型提升,但是還先給結(jié)果賦值給short類型變量,就需要強(qiáng)制轉(zhuǎn)換。
強(qiáng)制類型轉(zhuǎn)換代碼:? ? ?/*
* 強(qiáng)制類型轉(zhuǎn)換*? ? ? 1.? 特點(diǎn):代碼需要進(jìn)行特殊的格式處理,不能自動(dòng)完成*? ? ? 2.? 格式:范圍小的類型 范圍小的變量名 =(范圍小的類型) 原本范圍的數(shù)據(jù);* */
public class Demo02DataType {
public static void main(String[] args) {
//左邊int類型,右邊是long類型,不一樣
? ? ? ? //long-->int,不是從小到大
? ? ? ? //不能發(fā)生自動(dòng)類型轉(zhuǎn)換!
? ? ? ? // 2.? 格式:范圍小的類型 范圍小的變量名 =(范圍小的類型) 原本范圍的數(shù)據(jù);
? ? ? ? int num = (int) 100L;
? ? ? ? System.out.println(num); //100
? ? }
}
數(shù)據(jù)類型轉(zhuǎn)換_注意事項(xiàng)
代碼????????????????/*
* 強(qiáng)制類型轉(zhuǎn)換*? ? ? 1.? 特點(diǎn):代碼需要進(jìn)行特殊的格式處理,不能自動(dòng)完成*? ? ? 2.? 格式:范圍小的類型 范圍小的變量名 =(范圍小的類型) 原本范圍的數(shù)據(jù);*
*注意事項(xiàng):*? 1.強(qiáng)制類型轉(zhuǎn)換一般不推薦使用,因?yàn)橛锌赡馨l(fā)生精度損失、數(shù)據(jù)溢出。*? 2.byte/short/char這三種類型都可以發(fā)生數(shù)字運(yùn)算,例如加法“+”。*? 3.byte/short/char這三種類型載運(yùn)算的時(shí)候,都會(huì)被首先提升成為int類型,然后在計(jì)算。*? 4.boolean類型不能發(fā)生數(shù)據(jù)類型轉(zhuǎn)換*? */
public class Demo02DataType {
public static void main(String[] args) {
//左邊int類型,右邊是long類型,不一樣
? ? ? ? //long-->int,不是從小到大
? ? ? ? //不能發(fā)生自動(dòng)類型轉(zhuǎn)換!
? ? ? ? // 2.? 格式:范圍小的類型 范圍小的變量名 =(范圍小的類型) 原本范圍的數(shù)據(jù);
? ? ? ? int num = (int)100L;
? ? ? ? System.out.println(num); //100
? ? ? ? int num2 = (int)6000000000L;
? ? ? ? System.out.println(num2); //1705032704
? ? ? ? // double-->int,強(qiáng)制類型轉(zhuǎn)換
? ? ? ? int num3 = (int)3.5;
? ? ? ? System.out.println(num3); // 3.這并不是四舍五入,所有的小數(shù)位都會(huì)被舍棄掉
? ? ? ? char zifu1 ='A'; //這是一個(gè)字符型變量,里面是大寫字母A
? ? ? ? System.out.println(zifu1 +1); // 66,也就是大字幕A被當(dāng)做60進(jìn)行處理
? ? ? ? //計(jì)算機(jī)的底層會(huì)用一個(gè)數(shù)字(二進(jìn)制)來代表字符A,就是65
? ? ? ? //一旦char類型進(jìn)行了數(shù)字運(yùn)算,那么字符就會(huì)按照一定的規(guī)則翻譯成為一個(gè)數(shù)字
? ? ? ? byte num4 =40; //注意!右側(cè)的數(shù)值大小不能超過左側(cè)的類型范圍
? ? ? ? byte num5 =50;
? ? ? ? // byte + byte --> int + int --> int
? ? ? ? int result1 = num4 + num5;
? ? ? ? System.out.println(result1); //90
? ? ? ? short num6 =60;
? ? ? ? // byte + short --> int + int --> int
? ? ? ? // int強(qiáng)制轉(zhuǎn)換為short:注意必須保證邏輯上的 真實(shí)大小本來就沒有超過short范圍,否則會(huì)發(fā)生數(shù)據(jù)溢出
? ? ? ? int result2 = num4 + num6;
? ? ? ? System.out.println(result2); //100
? ? }
}
ASCII編碼表? ? ? ? ? ? ?代碼????????/*
* 數(shù)字和字符的對(duì)照關(guān)系表(編碼表):*
* ASCII碼表:American Standard Code for Information Interchange,美國(guó)信息交換標(biāo)準(zhǔn)代碼。* Unicode碼表:萬國(guó)碼。也是數(shù)字和符號(hào)的對(duì)照關(guān)系,開頭0-127部分和ASCII完全一樣,但是從128開頭包含有更多字符。*
* 48 - '0'
* 65 - 'A'
* 97 - 'a'
* */
public class Demo03DataType {
public static void main(String[] args) {
char zifu1 ='1';
? ? ? ? System.out.println(zifu1 +0); // 49
? ? ? ? char zifu2 ='A'; // 其實(shí)底層保存的是65數(shù)字
? ? ? ? char zifu3 ='c';
? ? ? ? //左側(cè)是int類型,右側(cè)是char類型。
? ? ? ? //char --> int,確實(shí)是從小到大
? ? ? ? //發(fā)生了自動(dòng)類型轉(zhuǎn)換
? ? ? ? int num = zifu3;
? ? ? ? System.out.println(num); // 99
? ? ? ? char zifu4 ='中'; // 正確寫法
? ? ? ? System.out.println(zifu4 +0); // 20013
? ? }
}
算數(shù)運(yùn)算符
算數(shù)運(yùn)算符包括
+? ? ? ? ? ? ? ? ? ? 加法運(yùn)算,字符串連接運(yùn)算
-? ? ? ? ? ? ? ? ? ? 減法運(yùn)算
*? ? ? ? ? ? ? ? ? ? 乘法運(yùn)算
/? ? ? ? ? ? ? ? ? ? 除法運(yùn)算
%? ? ? ? ? ? ? ? ? 取模運(yùn)算,兩個(gè)數(shù)字相除取余數(shù)
++、--? ? ? ? ? ?自增自減運(yùn)算
java中,整數(shù)使用以上運(yùn)算符,無論怎么計(jì)算,也不會(huì)得到小數(shù)。
1? ? public static void main (String[] args) {
2? ? ? ? ? ? ? ? int i = 1234;
3? ? ? ? ? ? ? ? System.out.println(i/1000*1000);? ? //計(jì)算結(jié)果是1000
4????}
++? ? 運(yùn)算,變量自己增長(zhǎng)1.反之,????--????運(yùn)算,變量自己減少1,用法與? ? ++? ? 一致。
算術(shù)運(yùn)算符_四則與取模運(yùn)? ? ? ? ? ? 代碼????/*
* 運(yùn)算符:進(jìn)行特定操作的符號(hào)。? 例如:+
* 表達(dá)式:用運(yùn)算符連起來的式子叫做表達(dá)式。? 例如: 20 + 5。 又例如:a + b
*
* 四則運(yùn)算:* 加:+
* 減:-
* 乘:*
* 除:/
*取模(取余數(shù)):%
*
* 首先計(jì)算得到表達(dá)式的結(jié)果,然后再打印輸出這個(gè)結(jié)果* 復(fù)習(xí)一下小學(xué)一年級(jí)的除法公式:* 被除數(shù) / 除數(shù) = 商 ... 余數(shù)*
* 對(duì)于一個(gè)整數(shù)的表達(dá)式來說,除法用的是整數(shù)除,整數(shù)除以整數(shù),結(jié)果仍然是整數(shù),只看商,不看余數(shù)。* 只有對(duì)于整數(shù)的除法來說,取模運(yùn)算符才有余數(shù)的意義*
* 注意事項(xiàng):*? ? 1.? 一旦運(yùn)算當(dāng)中有不同類型的數(shù)據(jù),那么結(jié)果將會(huì)是數(shù)據(jù)類型范圍大的那種。* */
public class Demo04Operator {
public static void main(String[] args) {
//兩個(gè)常量之間可以進(jìn)行數(shù)學(xué)運(yùn)算
? ? ? ? System.out.println(20 +30);
? ? ? ? //兩個(gè)變量之間也可以進(jìn)行數(shù)學(xué)運(yùn)算
? ? ? ? int a =20;
? ? ? ? int b =30;
? ? ? ? System.out.println(a - b); //-10
? ? ? ? //變量和常量之間可以混合使用
? ? ? ? System.out.println(a *10); //200
? ? ? ? int x =10;
? ? ? ? int y =3;
? ? ? ? int result1 = x / y;
? ? ? ? System.out.println(result1); //3
? ? ? ? int result2 = x % y;
? ? ? ? System.out.println(result2); //余數(shù),模,1
// int + double --> double + double --> double
? ? ? ? double result3 = x +2.5;
? ? ? ? System.out.println(result3); //12.5
? ? }
}
算數(shù)運(yùn)算符_加號(hào)的多種? ? ? ? ? ? ? ? 代碼:/*
* 四則運(yùn)算當(dāng)中的加號(hào)“+”有常見的三種方法:*
*1. 對(duì)于數(shù)值來說,那就是加法*2. 對(duì)于字符char類型來說,在計(jì)算之前,char就會(huì)被提升成為int,然后在計(jì)算。* char類型字符,和int類型數(shù)字,之間的對(duì)照關(guān)系表: ASCII、Unicode
*3. 對(duì)于字符串String(首字母大寫,并不是關(guān)鍵字)來說,加號(hào)代表字符串連接操作。* 任何數(shù)據(jù)類型的字符串進(jìn)行連接的時(shí)候,結(jié)果都會(huì)變成字符串* */
public class Demo05Plus {
public static void main(String[] args) {
//字符串類型的變量基本使用
? ? ? ? //數(shù)據(jù)類型 變量名稱 = 數(shù)據(jù)值;
? ? ? ? String str1 ="Hello";
? ? ? ? System.out.println(str1); // Hello
? ? ? ? System.out.println("Hello" +"World"); // HelloWorld
? ? ? ? String str2 ="Java";
? ? ? ? System.out.println(str2 +20); // Java20
? ? ? ? // 優(yōu)先級(jí)問題
? ? ? ? // String + int + int
// String? ? ? + int
// String
? ? ? ? System.out.println(str2 +20 +30); // Java2030
? ? }
}
算術(shù)運(yùn)算符_自增自減運(yùn)? ? ? ? ? ? ? ? 代碼:/*
*自增運(yùn)算符:++
*自減運(yùn)算符:--
*
* 含義: 讓一個(gè)變量漲一個(gè)數(shù)字1,或者讓一個(gè)變量降一個(gè)數(shù)字1
* 使用格式:寫在變量名稱之前,或者寫在變量名稱之后。例如: ++num, 也可以num++
* 使用方式:*? ? ? 1. 單獨(dú)使用:不和其他任何操作混合,自己獨(dú)立成為一個(gè)步驟*? ? ? 2. 混合使用:和其他操作混合,例如與賦值混合,或者與打印操作混合,等。* 使用區(qū)別:*? ? ? 1.在獨(dú)立使用的時(shí)候,前++和后++沒有任何區(qū)別,也就是:++num;和num++;是完全一樣的。*? ? ? 2.在混合的時(shí)候,有【重大區(qū)別】*? ? ? ? ? A. 如果是【前++】,那么變量【立刻馬上+1】,然后拿著結(jié)果進(jìn)行使用。? ? ? ? 【先加后用】*? ? ? ? ? B. 如果是【后++】,那么首先使用變量本來的數(shù)值,【然后再讓變量+1】? ? ? 【先用后加】*
* 注意事項(xiàng):*? ? ? 只有變量又能使用自增、自減運(yùn)算符。常量不可能發(fā)生改變,所以不能用。*/
public class Demo06Operator {
public static void main(String[] args) {
int num1 =10;
? ? ? ? System.out.println(num1); //10
? ? ? ? ++num1; // 單獨(dú)使用,前++
? ? ? ? System.out.println(num1); //11
? ? ? ? num1++; // 單獨(dú)使用,后++
? ? ? ? System.out.println(num1); //12
? ? ? ? System.out.println("=========");
? ? ? ? // 與打印操作混合的時(shí)候
? ? ? ? int num2 =20;
? ? ? ? // 混合使用,先++,變量立刻馬上變成21,然后打印結(jié)果21
? ? ? ? System.out.println(++num2); // 21
? ? ? ? System.out.println(num2); //21
? ? ? ? System.out.println("=========");
? ? ? ? int num3 =30;
? ? ? ? // 混合使用,后++,首先使用變量本來的30,然后再讓變量+1得到31
? ? ? ? System.out.println(num3++); // 30
? ? ? ? System.out.println(num3); // 31
? ? ? ? System.out.println("=========");
? ? ? ? int num4 =40;
? ? ? ? //和賦值操作混合
? ? ? ? int result1 = --num4; // 混合使用,前--,變量立刻馬上開始-1變成39,然后將結(jié)果39交給result1變量
? ? ? ? System.out.println(result1); // 39
? ? ? ? System.out.println(num4); // 39
? ? ? ? System.out.println("=========");
? ? ? ? int num5 =50;
? ? ? ? // 混合使用,后--,首先把本來的數(shù)字50交給result2,然后我自己在-1變成49
? ? ? ? int result2 = num5--;
? ? ? ? System.out.println(result2); // 50
? ? ? ? System.out.println(num5); // 49
? ? ? ? System.out.println("=========");
? ? ? ? int x =10;
? ? ? ? int y =20;
? ? ? ? // 11 + 20 31
? ? ? ? int result3 = ++x + y--;
? ? ? ? System.out.println("result3"); // 31
? ? ? ? System.out.println(x); // 11
? ? ? ? System.out.println(y); // 19
? ? ? ? // 30++; //錯(cuò)誤寫法!常量不可以使用++或者--
? ? }
}
賦值運(yùn)算符
賦值運(yùn)算符包括:
=? ? ? ? ? ? ? ? 等于號(hào)? ? ? ? ? ? ? ? +=? ? ? ? ? ? ? ? 加等號(hào)? ? ? ? ? ? ? ? ? ? -=? ? ? ? ? ? ? ? ? ? 減等號(hào)
*=? ? ? ? ? ? ? 乘等好? ? ? ? ? ? ? ? ?/=? ? ? ? ? ? ? ? ?除等號(hào)? ? ? ? ? ? ? ? ? ? %? ? ? ? ? ? ? ? ? ? 取模等
賦值運(yùn)算符,就是將符號(hào)右邊的值,賦給左邊的值。
代碼:? ??/*
* 賦值運(yùn)算符分為:*
* 基本賦值運(yùn)算符:就是一個(gè)符號(hào)”=“,代表將右側(cè)的數(shù)據(jù)交給左側(cè)的變量。*? int a = 30;*
* 復(fù)合賦值運(yùn)算符:*? ? ? +=? ? a += 3? 相當(dāng)于a = a + 3
*? ? ? -=? ? b -= 4? 相當(dāng)于b = b - 4
*? ? ? *=? ? c *= 5? 相當(dāng)于c = c * 5
*? ? ? /=? ? d /= 6? 相當(dāng)于d = d / 6
*? ? ? %=? ? e %= 7? 相當(dāng)于e = e % 7
*
* 注意事項(xiàng):*? ? ? 1: 只有變量才能使用賦值運(yùn)算符,常量不能進(jìn)行賦值。*? ? ? 2: 復(fù)合賦值運(yùn)算符其中隱含了一個(gè)強(qiáng)制了類型轉(zhuǎn)換。* */
public class Demo07Operator {
public static void main(String[] args) {
int a =10;
? ? ? ? // 按照公式進(jìn)行翻譯:a = a + 5
? ? ? ? // a = 10 + 5;
? ? ? ? // a = 15;
? ? ? ? // a本來是10,現(xiàn)在重新賦值得到15
? ? ? ? a +=5;
? ? ? ? System.out.println(a); // 15
? ? ? ? int x =10;
? ? ? ? // x = x % 3;
// x = 10 % 3;
// x = 1;
? ? ? ? // x本來是10,現(xiàn)在重新賦值得到1
? ? ? ? x %=3;
? ? ? ? System.out.println(x); // 1
? ? ? ? // 50 = 30; // 常量不能進(jìn)行賦值,不能寫在賦值運(yùn)算符的左邊,錯(cuò)誤寫法!
? ? ? ? byte num =30;
? ? ? ? // num = num + 5;
// num = byte + int
// num = int + int
// num = int
// num = (byte) int
? ? ? ? num +=5;
? ? ? ? System.out.println(num); // 35
? ? }
}
比較運(yùn)算符
比較運(yùn)算符包括:
==? ? ? ? 比較符號(hào)兩邊數(shù)據(jù)是否相等,相等結(jié)果是true。
<? ? ? ? ? 比較符號(hào)左邊的數(shù)據(jù)是否小于右邊的數(shù)據(jù),如果小于的結(jié)果是true。
>? ? ? ? ???比較符號(hào)左邊的數(shù)據(jù)是否大于右邊的數(shù)據(jù),如果大于的結(jié)果是true。
<=? ? ? ? ?比較符號(hào)左邊的數(shù)據(jù)是否小于或者等于右邊的數(shù)據(jù),如果小于的結(jié)果是true。
>=? ? ? ? ?比較符號(hào)左邊的數(shù)據(jù)是否大于或者等于右邊的數(shù)據(jù),如果大于的結(jié)果是true。
!=? ? ? ? 不等于符號(hào),如果符號(hào)兩邊的數(shù)據(jù)不相等,結(jié)果是true。
比較運(yùn)算符,是兩數(shù)據(jù)之間進(jìn)行比較的運(yùn)算,運(yùn)算結(jié)果都是布爾值true或者false。
代碼:????????????/*
* 比較運(yùn)算符:* 大于:>
* 小于:<
* 大于等于:>=
* 小于等于:<=
* 等于:? ? ? ==? 【兩個(gè)等號(hào)連寫才是相等,一個(gè)等號(hào)代表的是賦值】* 不相等:? ? !=
*
* 注意事項(xiàng):* 1. 比較比較運(yùn)算符的結(jié)果一定是一個(gè)boolean值,成立就是true,不成立就是false
* 2. 如果進(jìn)行多次判斷,不能連這寫。* 數(shù)學(xué)當(dāng)中的寫法,例如:1 < x > 3
* 程序當(dāng)中【不允許】這種寫法。*
* */
public class Demo08Operator {
public static void main(String[] args) {
System.out.println(10 >5); //true
? ? ? ? int num1 =10;
? ? ? ? int num2 =12;
? ? ? ? System.out.println(num1 < num2); // true
? ? ? ? System.out.println(num2 >=100); // false
? ? ? ? System.out.println(num2 <=100); // true
? ? ? ? System.out.println(num2 <=12); // true
? ? ? ? System.out.println("=======");
? ? ? ? System.out.println(10 ==10); // true
? ? ? ? System.out.println(20 !=25); // true
? ? ? ? System.out.println(20 !=20); // false
? ? ? ? int x =2;
? ? ? ? //System.out.println(1 < x < 3); //錯(cuò)誤寫法!編譯報(bào)錯(cuò)!不能連著寫
}
}