目錄
一、運算符和表達式
二、算術運算符
字元的"+"操作
字元串的"+"操作
三、指派運算符
一、運算符和表達式
運算符:對常量或者變量進行操作的符号
表達式:用運算符把常量或者變量連接配接起來符合java文法的式子就可以稱為表達式
不同運算符連接配接的表達式展現的是不同類型的表達式
舉例說明:
int a = 10;
int b = 20;
int c = a + b;
+:是運算符,并且是算術運算符。
a+b:是表達式,由于+是算術運算符,是以這個表達式叫算術運算符
二、算術運算符
符号 | 作用 |
+ | 加 |
- | 減 |
* | 乘 |
/ | 除 |
% | 取餘 |
注意:
/和%的差別:兩個資料做除法,/取結果的商,%取結果的餘數。
整數操作隻能得到整數,要想得到小數,必須有浮點數參與運算。
int a = 10;
int b = 3;
System.out.println(a / b); // 輸出結果3
System.out.println(a % b); // 輸出結果1
字元的"+"操作
char類型參與算術運算,使用的是計算機底層對應的+進制數值,需要記住三個字元對應的數值:
'a' 對應 97 a-z是連續的,是以'b'對應的數值是98,'c'是99,依次遞加
'A' 對應 65 A-Z是連續的,是以'B'對應的數值是66,'C'是67,依次遞加
'0' 對應 48 0-9是連續的,是以'1'對應的數值是49,'2'是50,依次遞加
// 可以通過使用字元與整數做算術運算,得出字元對應的數值是多少
char ch1 = 'a';
System.out.println(ch1 + 1); // 輸出98,97 + 1 = 98
char ch2 = 'A';
System.out.println(ch2 + 1); // 輸出66,65 + 1 = 66
char ch3 = '0';
System.out.println(ch3 + 1); // 輸出49,48 + 1 = 49
算術表達式中包含不同的基本資料類型的值的時候,整個算術表達式的類型會自動進行提升。
提升規則:
byte類型,short類型和char類型将被提升到int類型,不管是否有其他類型參與運算。
整個表達式的類型自動提升到與表達式中最高等級的操作數相同的類型
等級順序:byte,short,char --> int --> long --> float --> double
例如:
byte b1 = 10;
byte b2 = 20;
// byte b3 = b1 + b2; // 該行報錯,因為byte類型參與算術運算會自動提示為int,int指派給byte可能損失
精度
int i3 = b1 + b2; // 應該使用int接收
byte b3 = (byte) (b1 + b2); // 或者将結果強制轉換為byte類型
-------------------------------
int num1 = 10;
double num2 = 20.0;
double num3 = num1 + num2; // 使用double接收,因為num1會自動提升為double類型
正是因為上述原因,是以在程式開發中我們很少使用byte或者short類型定義整數,也很少會使用char類型定義字元,而使用字元串類型,更不會使用char類型做算術運算。
字元串的"+"操作
當“+”操作中出現字元串時,這個”+”是字元串連接配接符,而不是算術運算。
System.out.println("xiazhi"+ 66); // 輸出:xiazhi66
在”+”操作中,如果出現了字元串,就是連接配接運算符,否則就是算術運算。當連續進行“+”操作時,從左到右逐個執行。
System.out.println(1 + 99 + "年的人類"); // 輸出:199年的人類
System.out.println(3 + 3 + "xiazhi" + 5 + 5); // 輸出:6xiazhi55
// 可以使用小括号改變運算的優先級
System.out.println(4 + 2 + "xiazhi" + (4 + 4)); // 輸出:6xiazhi8
三、指派運算符
指派運算符的作用是将一個表達式的值賦給左邊,左邊必須是可修改的,不能是常量。
符号 | 作用 | 說明 |
= | 指派 | a=66,将66指派給變量a |
+= | 加後指派 | a+=b,将a+b的值給a |
-= | 減後指派 | a-=b,将a-b的值給a |
*= | 乘後指派 | a*=b,将axb的值給a |
/= | 除後指派 | a/=b,将a+b的商給a |
%= | 取餘後指派 |
short s = 10;
s = s + 10; // 此行代碼報出,因為運算中s提升為int類型,運算結果int指派給short可能損失精度
s += 10; // 此行代碼沒有問題,隐含了強制類型轉換,相當于 s = (short) (s + 10);