一,數據類型轉換
當數據的類型不一致時,將會發生數據類型轉換
(1),自動類型轉換(隱式)
特點:代碼不需要進行特殊處理,自動完成。
規則:數據范圍從小轉換到大(byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double)
代碼示例:

package cn.itcate.day2demo; public class Demo01DataType { public static void main(String[] args) { System.out.println(1024); //這是一個整數,默認是int類型 System.out.println(3.14);// 浮點數,默認是double類型 long num1 = 100; System.out.println(num1); //100 // 左邊是int類型,右邊是long類型,左右不一樣 // int---->long,符合從小范圍到大氛圍的要求 // 這一行代碼發生了自動類型轉換 double num2 = 2.5F; System.out.println(num2);// 2.5 // 左邊是double類型,右邊是float類型,左右不一樣 // float --> double,符合從小到大的規則 // 也發生了自動類型轉換 float num3 = 30L; System.out.println(num3); // 30.0 // 左邊是float類型,右邊是long類型,左右不一樣 // long --> float,范圍是float更大一些,符合從小到大的規則 // 也發生了自動類型轉換 } }
(2),強制轉換(顯式)
當我們將浮點數類型賦值到int類型,將會產生編譯失敗。
int i = 3.14; // 錯誤
double類型內存占8個字節,int類型內存占4個字節。3.14是double類型,取值氛圍打於int類型。違反從小范圍轉換到大范圍的原則。
強制類型轉換 :能將 取值范圍大的類型 強制轉換成 取值范圍小的類型 。
格式:數據類型 變量名 = (數據類型) 被轉數據類型;
代碼示例:

package cn.itcate.day2demo; public class Demo02DataType { public static void main(String[] args) { int num = (int) 100L; System.out.println(num); // 100 // 左邊是int類型,右邊是long類型,不一樣 // long --> int,不是從小到大 // 不能發生自動類型轉換! // 格式:范圍小的類型 范圍小的變量名 = (范圍小的類型) 原本范圍大的數據; // long類型轉換為int類型 int num2 = (int) 60000000L; System.out.println(num2); // 1705032704 // double --> int, 強制類型轉換 int num3 = (int) 3.99; System.out.println(num3);// 3 char str = 'A'; System.out.println(str + 1);// 66 // 2. byte/short/char這三種類型都可以發生數學運算,例如加法“+”. // 3. byte/short/char這三種類型在運算的時候,都會被首先提升成為int類型,然后再計算。 byte num4 = 40; 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強制轉換為short:注意必須保證邏輯上真實大小本來就沒有超過short范圍,否則會發生數據溢出 short result2 = (short) (num4 + num6); System.out.println(result2); // 100 } }
注意:
1. 強制類型轉換一般不推薦使用,因為有可能發生精度損失、數據溢出。
2. byte/short/char這三種類型都可以發生數學運算,例如加法“+”.
3. byte/short/char這三種類型在運算的時候,都會被首先提升成為int類型,然后再計算。
4. boolean類型不能發生數據類型轉換
二,ASCII編碼表
數字和字符的對照關系表(編碼表)如圖:
ASCII碼表:American Standard Code for Information Interchange,美國信息交換標准代碼。
Unicode碼表:萬國碼。也是數字和符號的對照關系,開頭0-127部分和ASCII完全一樣,但是從128開始包含有更多字符。
編碼表太長了,我們可以記住具有代表性的幾個:
代碼示例:

package cn.itcate.day2demo; public class Demo03DataTyoeChar { public static void main(String[] args) { // 左側是int類型,右邊是char類型, // char --> int,確實是從小到大 // 發生了自動類型轉換 char zifu1 = '0'; System.out.println(zifu1 + 0); // 48 char zifu2 = 'A'; System.out.println(zifu2 + 0);// 65 char zifu3 = 'a'; System.out.println(zifu3 + 0);// 97 //超出ASCII的范圍,使用Unicode char zifu4 = ; System.out.println(zifu4 + 0);'中' } }
注意:在char類型和int類型計算的過程中,char類型的字符先查詢編碼表,char類型提升為了int類型。char類型內存2個字節,int類型內存4個字節。
三,運算符
3.1 算法運算符
+ 加法運算,字符串連接運算
- 減法運算
* 乘法運算
/ 除法運算
% 取模運算,兩個數字相除取余數
++、 -- 自增自減運算
運算符:進行特定操作的符號。例如:+、-
表達式:用運算符連起來的式子叫做表達式。例如:3 + 5。又例如:a + c
代碼示例:

注意:
- 對於一個整數的表達式來說,除法用的是整除,整數除以整數,結果仍然是整數。只看商,不看余數。
- 只有對於整數的除法來說,取模運算符才有余數的意義。
- 一旦運算當中有不同類型的數據,那么結果將會是數據類型范圍大的那種。
字符串的拼接(+)
1. 對於數值來說,那就是加法。
2. 對於字符char類型來說,在計算之前,char會被提升成為int,然后再計算。
char類型字符,和int類型數字,之間的對照關系表:ASCII、Unicode
3. 對於字符串String(首字母大寫,並不是關鍵字)來說,加號代表字符串連接操作。
任何數據類型和字符串進行連接的時候,結果都會變成字符串

package cn.itcate.day2demo; public class Demo05Plus { public static void main(String[] args) { // 字符串類型的變量基本使用 // 數據類型 變量名稱 = 數值值; String str1 = "Hello"; System.out.println(str1); // Hello System.out.println("Hello" + "Hello"); // HelloWorld String str2 = "Java"; // String + int --> String System.out.println(str2 + 20); // Java20 // 優先級問題 System.out.println(str2 + 20 + 30);// Java2030 System.out.println(str2 + (20 + 30));// Java50 } }
3.2 自增(++)和自減(--)
基本含義:讓一個數字變量加1,或者讓一個數字變量減1
使用格式:有前++和后++。例如:++num, num++
獨立運算:
時前++和后++沒有區別
混合運算:
和其他變量放在一起, 前 ++ 和 后 ++ 就產生了不同。
A. 如果是【前++】,那么變量【立刻馬上+1】,然后拿着結果進行使用。 【先加后用】
B. 如果是【后++】,那么首先使用變量本來的數值,【然后再讓變量+1】。 【先用后加】
變量 前 ++ :變量a自己加1,將加1后的結果賦值給b,也就是說a先計算。a和b的結果都是2。
代碼如下:
public static void main(String[] args) { int a = 1; int b = ++a; System.out.println(a);//計算結果是2 System.out.println(b);//計算結果是2 }
變量 后 ++ :變量a先把自己的值1,賦值給變量b,此時變量b的值就是1,變量a自己再加1。a的結果是2,b的結果是1。
代碼如下:
public static void main(String[] args) { int a = 1; int b = a++; System.out.println(a);//計算結果是2 System.out.println(b);//計算結果是1 }
代碼如下:

package cn.itcate.day2demo; public class Demo06Operator { public static void main(String[] args) { int num1 = 10; // 前++ ++num1; System.out.println(num1); // 后++ num1++; System.out.println(num1); // 混合使用 int x = 10; int y = 20; int result1 = ++x + y--; System.out.println(result1);// 31 System.out.println(x); // 11 System.out.println(y); // 19 } }
注意:變量才能使用自增、自減運算符。常量不可發生改變。
賦值運算
= 等於
+= 加等於
-+ 減等於
*= 乘等於
/= 除等於
%= 取模等
代碼如下:
public static void main(String[] args){ int i = 5; i+=5;//計算方式 i=i+5 變量i先加5,再賦值變量i System.out.println(i); //輸出結果是10 }
比較運算符
== 比較符號兩邊數據是否相等,相等結果是true。
< 比較符號左邊的數據是否小於右邊的數據,如果小於結果是true。
> 比較符號左邊的數據是否大於右邊的數據,如果大於結果是true。
<= 比較符號左邊的數據是否小於或者等於右邊的數據,如果小於結果是true。
>= 比較符號左邊的數據是否大於或者等於右邊的數據,如果小於結果是true。
! = 不等於符號 ,如果符號兩邊的數據不相等,結果是true
代碼如下:
public static void main(String[] args) { System.out.println(1==1);//true System.out.println(1<2);//true System.out.println(3>4);//false System.out.println(3<=4);//true System.out.println(3>=4);//false System.out.println(3!=4);//true }
比較運算符
&& 短路與
1. 兩邊都是true,結果是true
2. 一邊是false,結果是false
短路特點:符號左邊是false,右邊不再運算
|| 短路或
1. 兩邊都是false,結果是false
2. 一邊是true,結果是true
短路特點: 符號左邊是true,右邊不再運算
! 取反
1. ! true 結果是false
2. ! false結果是true
public static void main(String[] args) { System.out.println(true && true);//true System.out.println(true && false);//false System.out.println(false && true);//false,右邊不計算 System.out.println(false || false);//falase System.out.println(false || true);//true System.out.println(true || false);//true,右邊不計算 System.out.println(!false);//true }
三元運算符
格式: 數據類型 變量名 = 布爾類型表達式? 結果1:結果2
三元運算符計算方式:
布爾類型表達式結果是 true,三元運算符整體結果為結果1,賦值給變量。
布爾類型表達式結果是 false,三元運算符整體結果為結果2,賦值給變量。
代碼示例:
public static void main(String[] args) { int i = (1==2 ? 100 : 200); System.out.println(i);//200 int j = (3<=4 ? 500 : 600); System.out.println(j);//500 }