2020-06-03

數(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ò)!不能連著寫

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容