首頁技術(shù)文章正文

運(yùn)算符是什么?Java運(yùn)算符詳細(xì)介紹

更新時間:2021-09-10 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班


運(yùn)算符是對常量或者變量進(jìn)行操作的符號,Java的運(yùn)算符有六類:算數(shù)運(yùn)算符、賦值運(yùn)算符、自增自減運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符,三元運(yùn)算符、用運(yùn)算符把常量或者變量連接起來符合java語法的式子就可以稱為表達(dá)式。不同運(yùn)算符連接的表達(dá)式體現(xiàn)的是不同類型的表達(dá)式。下面來具體看一下:

1.算數(shù)運(yùn)算符和算術(shù)運(yùn)算符的表達(dá)式

舉例說明:

int a = 10;int b = 20;int c = a + b;
+:是運(yùn)算符,并且是算術(shù)運(yùn)算符。 a + b:是表達(dá)式,由于+是算術(shù)運(yùn)算符,所以這個表達(dá)式叫算術(shù)表達(dá)式。

1631255165693_21.png

注意: /和%的區(qū)別:兩個數(shù)據(jù)做除法,/取結(jié)果的商,%取結(jié)果的余數(shù)。 整數(shù)操作只能得到整數(shù),要想得到小數(shù),必須有浮點(diǎn)數(shù)參與運(yùn)算。
int a = 10;
int b = 3;
System.out.println(a / b); // 輸出結(jié)果3
System.out.println(a % b); // 輸出結(jié)果1
字符的“+”操作
char類型參與算術(shù)運(yùn)算,使用的是計算機(jī)底層對應(yīng)的十進(jìn)制數(shù)值。需要我們記住三個字符對應(yīng)的數(shù)值:

'a' -- 97 a-z是連續(xù)的,所以'b'對應(yīng)的數(shù)值是98,'c'是99,依次遞加

'A' -- 65 A-Z是連續(xù)的,所以'B'對應(yīng)的數(shù)值是66,'C'是67,依次遞加

'0' -- 48 0-9是連續(xù)的,所以'1'對應(yīng)的數(shù)值是49,'2'是50,依次遞加

// 可以通過使用字符與整數(shù)做算術(shù)運(yùn)算,得出字符對應(yīng)的數(shù)值是多少
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

算術(shù)表達(dá)式中包含不同的基本數(shù)據(jù)類型的值的時候,整個算術(shù)表達(dá)式的類型會自動進(jìn)行提升。

提升規(guī)則:

byte類型,short類型和char類型將被提升到int類型,不管是否有其他類型參與運(yùn)算。

整個表達(dá)式的類型自動提升到與表達(dá)式中最高等級的操作數(shù)相同的類型

等級順序:byte,short,char --> int --> long --> float --> double

例如:

byte b1 = 10;
byte b2 = 20;
// byte b3 = b1 + b2; // 該行報錯,因為byte類型參與算術(shù)運(yùn)算會自動提示為int,int賦值給byte可能損失
精度
int i3 = b1 + b2; // 應(yīng)該使用int接收
byte b3 = (byte) (b1 + b2); // 或者將結(jié)果強(qiáng)制轉(zhuǎn)換為byte類型
-------------------------------
int num1 = 10;
double num2 = 20.0;
double num3 = num1 + num2; // 使用double接收,因為num1會自動提升為double類型

tips:正是由于上述原因,所以在程序開發(fā)中我們很少使用byte或者short類型定義整數(shù)。也很少會使用char類型定
義字符,而使用字符串類型,更不會使用char類型做算術(shù)運(yùn)算。
當(dāng)“+”操作中出現(xiàn)字符串時,這個”+”是字符串連接符,而不是算術(shù)運(yùn)算。

System.out.println("itheima"+ 666); // 輸出:itheima666

在”+”操作中,如果出現(xiàn)了字符串,就是連接運(yùn)算符,否則就是算術(shù)運(yùn)算。當(dāng)連續(xù)進(jìn)行“+”操作時,從左到右逐個執(zhí) 行。

System.out.println(1 + 99 + "年黑馬"); // 輸出:199年黑馬
System.out.println(1 + 2 + "itheima" + 3 + 4); // 輸出:3itheima34
// 可以使用小括號改變運(yùn)算的優(yōu)先級
System.out.println(1 + 2 + "itheima" + (3 + 4)); // 輸出:3itheima7

2.賦值運(yùn)算符
賦值運(yùn)算符的作用是將一個表達(dá)式的值賦給左邊,左邊必須是可修改的,不能是常量。
1631255175870_22.png
注意: 擴(kuò)展的賦值運(yùn)算符隱含了強(qiáng)制類型轉(zhuǎn)換。

short s = 10;
s = s + 10; // 此行代碼報出,因為運(yùn)算中s提升為int類型,運(yùn)算結(jié)果int賦值給short可能損失精度
s += 10; // 此行代碼沒有問題,隱含了強(qiáng)制類型轉(zhuǎn)換,相當(dāng)于 s = (short) (s + 10);


3.自增自減運(yùn)算符
1631255186454_25.png

注意事項:

++和-- 既可以放在變量的后邊,也可以放在變量的前邊。

單獨(dú)使用的時候, ++和-- 無論是放在變量的前邊還是后邊,結(jié)果是一樣的。

參與操作的時候,如果放在變量的后邊,先拿變量參與操作,后拿變量做++或者--。

參與操作的時候,如果放在變量的前邊,先拿變量做++或者--,后拿變量參與操作。

最常見的用法:單獨(dú)使用。

int i = 10;
i++; // 單獨(dú)使用
System.out.println("i:" + i); // i:11
int j = 10;
++j; // 單獨(dú)使用
System.out.println("j:" + j); // j:11
int x = 10;
int y = x++; // 賦值運(yùn)算,++在后邊,所以是使用x原來的值賦值給y,x本身自增1
System.out.println("x:" + x + ", y:" + y); // x:11,y:10
int m = 10;
int n = ++m; // 賦值運(yùn)算,++在前邊,所以是使用m自增后的值賦值給n,m本身自增1
System.out.println("m:" + m + ", m:" + m); // m:11,m:11


4 .關(guān)系運(yùn)算符
關(guān)系運(yùn)算符有6種關(guān)系,分別為小于、小于等于、大于、等于、大于等于、不等于。
1631255197264_26.png
注意事項: 關(guān)系運(yùn)算符的結(jié)果都是boolean類型,要么是true,要么是false。
千萬不要把“==”誤寫成“=”,"=="是判斷是否相等的關(guān)系,"="是賦值。

int a = 10;
int b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
System.out.println(a >= b); // false
System.out.println(a < b); // true
System.out.println(a <= b); // true
// 關(guān)系運(yùn)算的結(jié)果肯定是boolean類型,所以也可以將運(yùn)算結(jié)果賦值給boolean類型的變量
boolean flag = a > b;
System.out.println(flag); // 輸出false


5.邏輯運(yùn)算符
邏輯運(yùn)算符把各個運(yùn)算的關(guān)系表達(dá)式連接起來組成一個復(fù)雜的邏輯表達(dá)式,以判斷程序中的表達(dá)式是否成立,判斷 的結(jié)果是 true 或 false。
1631255207000_27.png

//定義變量
int i = 10;
int j = 20;
int k = 30;
//& “與”,并且的關(guān)系,只要表達(dá)式中有一個值為false,結(jié)果即為false
System.out.println((i > j) & (i > k)); //false & false,輸出false
System.out.println((i < j) & (i > k)); //true & false,輸出false
System.out.println((i > j) & (i < k)); //false & true,輸出false
System.out.println((i < j) & (i < k)); //true & true,輸出true
System.out.println("--------");
//| “或”,或者的關(guān)系,只要表達(dá)式中有一個值為true,結(jié)果即為true
System.out.println((i > j) | (i > k)); //false | false,輸出false
System.out.println((i < j) | (i > k)); //true | false,輸出true
System.out.println((i > j) | (i < k)); //false | true,輸出true
System.out.println((i < j) | (i < k)); //true | true,輸出true
System.out.println("--------");
//^ “異或”,相同為false,不同為true
System.out.println((i > j) ^ (i > k)); //false ^ false,輸出false
System.out.println((i < j) ^ (i > k)); //true ^ false,輸出true
System.out.println((i > j) ^ (i < k)); //false ^ true,輸出true
System.out.println((i < j) ^ (i < k)); //true ^ true,輸出false
System.out.println("--------");
//! “非”,取反
System.out.println((i > j)); //false
System.out.println(!(i > j)); //!false,,輸出true


6.短路邏輯運(yùn)算符
1631255216965_28.png

在邏輯與運(yùn)算中,只要有一個表達(dá)式的值為false,那么結(jié)果就可以判定為false了,沒有必要將所有表達(dá)式的值都

計算出來,短路與操作就有這樣的效果,可以提高效率。同理在邏輯或運(yùn)算中,一旦發(fā)現(xiàn)值為true,右邊的表達(dá)式

將不再參與運(yùn)算。

邏輯與&,無論左邊真假,右邊都要執(zhí)行。

短路與&&,如果左邊為真,右邊執(zhí)行;如果左邊為假,右邊不執(zhí)行。

邏輯或|,無論左邊真假,右邊都要執(zhí)行。

短路或||,如果左邊為假,右邊執(zhí)行;如果左邊為真,右邊不執(zhí)行。

int x = 3;
int y = 4;
System.out.println((x++ > 4) & (y++ > 5)); // 兩個表達(dá)都會運(yùn)算
System.out.println(x); // 4
System.out.println(y); // 5
System.out.println((x++ > 4) && (y++ > 5)); // 左邊已經(jīng)可以確定結(jié)果為false,右邊不參與運(yùn)算
System.out.println(x); // 4
System.out.println(y); // 4


7.三元運(yùn)算符

三元運(yùn)算符語法格式:

關(guān)系表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2;
解釋:問號前面的位置是判斷的條件,判斷結(jié)果為boolean型,為true時調(diào)用表達(dá)式1,為false時調(diào)用表達(dá)式2。其 邏輯為:如果條件表達(dá)式成立或者滿足則執(zhí)行表達(dá)式1,否則執(zhí)行第二個。
舉例:
int a = 10;
int b = 20;
int c = a > b ? a : b; // 判斷 a>b 是否為真,如果為真取a的值,如果為假,取b的值
三元運(yùn)算符案例:
①需求:動物園里有兩只老虎,已知兩只老虎的體重分別為180kg、200kg,請用程序?qū)崿F(xiàn)判斷兩只老虎的體重是 否相同。
public class OperatorTest01 {
public static void main(String[] args) {
//1:定義兩個變量用于保存老虎的體重,單位為kg,這里僅僅體現(xiàn)數(shù)值即可。
int weight1 = 180;
int weight2 = 200;
//2:用三元運(yùn)算符實(shí)現(xiàn)老虎體重的判斷,體重相同,返回true,否則,返回false。
boolean b = weight1 == weight2 ? true : false;
//3:輸出結(jié)果
System.out.println("b:" + b);
}
}

②需求:一座寺廟里住著三個和尚,已知他們的身高分別為150cm、210cm、165cm,請用程序?qū)崿F(xiàn)獲取這三個和尚的最高身高。

public class OperatorTest02 {
public static void main(String[] args) {
//1:定義三個變量用于保存和尚的身高,單位為cm,這里僅僅體現(xiàn)數(shù)值即可。
int height1 = 150;
int height2 = 210;
int height3 = 165;
//2:用三元運(yùn)算符獲取前兩個和尚的較高身高值,并用臨時身高變量保存起來。
int tempHeight = height1 > height2 ? height1 : height2;
//3:用三元運(yùn)算符獲取臨時身高值和第三個和尚身高較高值,并用最大身高變量保存。
int maxHeight = tempHeight > height3 ? tempHeight : height3;
//4:輸出結(jié)果
System.out.println("maxHeight:" + maxHeight);
}
}





猜你喜歡:

什么是private關(guān)鍵字?怎么使用?

列舉你知道的JavaEE技術(shù),簡述其作用

在Java中是如何定義和聲明接口的?

Rewrite命令的用法介紹【Nginx教程】

黑馬程序員Java開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報名
和我們在線交談!