計算機的最基本用途之一就是執行數學運算,做爲一門計算機語言,Java也提供了一套豐富的運算符來操縱變量。
運算符和表達式是Java程序的基本組成要素。運算符是一種特殊的符號(在程序中可以進行特定操做的符號),用以表示數據的運算,賦值和比較。不一樣的運算符用來完成不一樣的運算。
java語言使用運算符將一個或者多個操做數連綴成執行性語句,造成表達式,表達式是由運算符和操做數按必定語法規則組成的符號序列(是由運算符鏈接起來的式子叫作表達式)。
運算符按照其要求的操做數數目來分,能夠有單目運算符、雙目運算符和三目運算符,它們分別對應於1個、2個、3個操做數。運算符按其功能來分,有算術運算符、賦值運算符、關係運算符、邏輯運算符、位運算符和三目運算符等。java
算術運算符主要用於進行基本的算術運算,如加法、減法、乘法、除法等。
Java 中經常使用的算術運算符:算法
算術運算符 | 含義 |
---|---|
+ | 加法運算 、字符串拼接運算、正數 |
- | 減法運算、負數 |
* | 乘法運算、通配符 |
/ | 除法運算(求商數) |
% | 除法運算(求餘數) |
++ | 自加1 |
-- | 自減1 |
其中,++和--既能夠出如今操做數的左邊,也能夠出如今右邊,但結果是不一樣的。能夠進行單獨使用,也能夠混合使用。
備註:若是變量在++運算符的左邊,那麼在運算過程當中,先進行自身加1,在執行++運算,變量在++運算符的右邊,那麼在運算過程當中,先進行那麼先使用原先的數值,再執行++運算符左邊的算法。
對於整數的表達式來講,除法用的是整除,求的是商數,結果任是整數
一旦運算中出現了不一樣的數據類型,那麼結果將會是數據類型範圍大的那種
說明:無論變量是在++或--運算符的左邊仍是右邊,對於該變量自己都會作自+1或-1運算。
注意:必定要注意哦!自增和自減運算符只能用於操做變量,不能直接用於操做數值或常量!例如 5++ 、 8-- 等寫法都是錯誤滴!
% 用來求餘數,也稱爲」取模運算符「
例子:ide
public class HelloWorld{ public static void main(String[] args) { int age1=24; int age2=18; int age3=36; int age4=27; int sum=age1+age2+age3+age4; double avg=sum/4; int minus=Math.abs(age1-age2); int newAge=--age1; System.out.println("四個年齡的總和:"+sum); System.out.println("四個年齡的平均值:"+avg); System.out.println("age1 和 age2年齡差值:"+minus); System.out.println("age1自減後的年齡:"+newAge); } }
賦值運算符是指爲變量或常量指定數值的符號。如可使用 「=」 將右邊的表達式結果賦給左邊的操做數。
Java 支持的經常使用賦值運算符,以下表所示:code
運算符 | 名稱 | 舉例 |
---|---|---|
= | 賦值 | c=a+b 將把a+b獲得的值賦給c |
+= | 加等與 | c+=a等價於c=c+a |
-= | 減等於 | c-=a等價於c=c-a |
*= | 乘等於 | c=a等價於c=c=a |
/= | 商等於 | c/=a等價於c=c/a |
%= | 餘等於(模等於) | c%=a等價於c=c%a |
備註:
1.=是基本的賦值運算符
2.剩下的都是符合賦值運算符
3.只有變量纔可使用賦值運算符,常量不能進行賦值
4.複合賦值運算符其中隱含了一個強制類型轉換
例子:對象
public class HelloWorld{ public static void main(String[] args) { int one = 10 ; int two = 20 ; int three = 0 ; three=one+two; System.out.println("three = one + two ==> "+three); three+=one; System.out.println("three += one ==> "+three); three-=one; System.out.println("three -= one ==> "+three); three*=one; System.out.println("three *= one ==> "+three); three/=one; System.out.println("three /= one ==> "+three); three%=one; System.out.println("three %= one ==> "+three); } }
比較運算符用於判斷兩個數據的大小,例如:大於、等於、不等於。比較的結果是一個布爾值( true 或 false )。
Java 中經常使用的比較運算符以下表所示:three
比較運算符 | 名稱 | 例子 | 結果 |
---|---|---|---|
> | 大於比較 | a=3;b=1;a>b | true |
< | 小於比較 | a=3;b=1;a<b | false |
>= | 大於等於比較 | a=3;b>=1 | true |
<= | 小於等於比較 | a=3;b=1;a<=b | false |
== | 相等比較 | a=3;b=1;a==b | false |
!= | 不等於比較 | a=3;b=1;a!=b | true |
注意哦:
一、 > 、 < 、 >= 、 <= 只支持左右兩邊操做數是數值類型
二、 == 、 != 兩邊的操做數既能夠是數值類型,也能夠是引用類型
三、>=、<=該運算符運算過程當中只要知足其中一種情形結果即爲true
四、若是進行屢次判斷,不能連着寫。內存
public class HelloWorld{ public static void main(String[] args) { int a=16; double b=9.5; String str1="hello"; String str2="imooc"; System.out.println("a等於b:" + (a == b)); System.out.println("a大於b:" + (a > b)); System.out.println("a小於等於b:" + (a < b)); System.out.println("str1等於str2:" + (str1.equals(str2))); } }
ps: 一、java中equals和==的區別 值類型是存儲在內存中的堆棧(簡稱棧),而引用類型的變量在棧中僅僅是存儲引用類型變量的地址,而其自己則存儲在堆中。
二、==操做比較的是兩個變量的值是否相等,對於引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內容是否相同。
三、equals操做表示的兩個變量是不是對同一個對象的引用,即堆中的內容是否相同。
四、==比較的是2個對象的地址,而equals比較的是2個對象的內容,顯然,當equals爲true時,==不必定爲true。字符串
邏輯運算符主要用於進行邏輯運算。Java 中經常使用的邏輯運算符以下表所示:數學
邏輯運算符 | 名稱 | 例子 | 結果 |
---|---|---|---|
與 | && | a&&b | 若是a與b都爲true,則返回true |
或 | a | b | 若是a與b任一爲true,則返回true |
非 | ! | !a | 若是a爲flase,則返回true,即取反 |
異域 | ^ | a^b | 若是a和b有且僅有一個true,則返回true |
咱們能夠從「投票選舉」的角度理解邏輯運算符:
一、 與:要求全部人都投票贊成,才能經過某議題
二、 或:只要求一我的投票贊成就能夠經過某議題
三、 非:某人本來投票贊成,經過非運算符,可使其投票無效
四、 異或:有且只能有一我的投票贊成,才能夠經過某議題
注意:
&與&&的異同點:
相同點:都是作與運算
不一樣點:&&能夠實現斷路(短路)
備註:短路效果,當&&符號左邊的布爾型值能夠肯定爲false的時候,那麼程序在執行到&&符號的時候,會發生跳躍,也就是&&後面的表達式程序不在執行
|與||的異同點:
相同點:都是作或運算
不一樣點:||能夠實現斷路(短路)
備註:短路效果,當||符號左邊的布爾型值能夠肯定爲true的時候,那麼程序在執行到||符號的時候,會發生跳躍,也就是||後面的表達式程序不在執行
例子:it
public class HelloWorld { public static void main(String[] args) { boolean a = true; // a贊成 boolean b = false; // b反對 boolean c = false; // c反對 boolean d = true; // d贊成 //a與b都必需要贊成才能經過 System.out.println((a && b) + " 未經過"); //a與b必須有一人贊成才能經過 System.out.println((a || b) + " 經過"); //a爲反對才能經過 System.out.println((!a) + " 未經過"); //c與d中必須有且只有一人贊成才能經過 System.out.println((c ^ d) + " 經過"); } }
條件運算符( ? : )也稱爲 「三元運算符」。
語法形式:布爾表達式 ? 表達式1 :表達式2
運算過程:若是布爾表達式的值爲 true ,則返回 表達式1 的值,不然返回 表達式2 的值
第一種例子:
public class HelloWorld { public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a < b ? "a>b?": "a < b √"); } }
說明:將三目運算直接在輸出語句中使用
第二種例子:
public class HelloWorld { public static void main(String[] args) { int a = 10; int b = 20; int c = a > b ? a : b; System.out.println(c); } }
說明:三目運算不在輸出語句中使用
注意:
若是三目運算符是在輸出語句中,那麼對三目運算符的結果值真假類型不要求。
若是不是在輸出語句中,在其餘的語句中,如賦值運算語句,那麼就須要嚴格控制三目運算符的結果值真假的數據類型,真假的結果值類型要一致,保持和賦值運算中的變量的數據類型一致
下表列出了位運算符的基本運算,假設整數變量A的值爲60和變量B的值爲13:
操做符 | 描述 | 例子 |
---|---|---|
& | 若是相對應位都是1,則結果爲1,不然爲0 | (A&B),獲得12,即0000 1100 |
若是相對應位都是0,則結果爲0,不然爲1 | (A | B)獲得61,即 0011 1101 |
^ | 若是相對應位值相同,則結果爲0,不然爲1 | (A ^ B)獲得49,即 0011 0001 |
〜 | 按位取反運算符翻轉操做數的每一位,即0變成1,1變成0。 | (〜A)獲得-61,即1100 0011 |
<< | 按位左移運算符。左操做數按位左移右操做數指定的位數。 | A << 2獲得240,即 1111 0000 |
>> | 按位右移運算符。左操做數按位右移右操做數指定的位數。 | A >> 2獲得15即 1111 |
>>> | 按位右移補零操做符。左操做數的值按右操做數指定的位數右移,移動獲得的空位以零填充。 | A>>>2獲得15即0000 1111 |
備註:位運算計算機底層採用的對整數進行二進制運算二進制轉十進制爲2的次冪累加和無符號右移對於正數來講,空出來的最高位拿0補位沒有無符號左移運算符