運算符是一種特殊的符號,運算符是經過必定的運算規則操做一個或多個操做數,並生成結果的特定符號,運算符和操做數的有效組合稱爲表達式。html
Java中運算符主要分爲如下幾類:編程
賦值運算符用於給變量或者常量指定值,賦值運算符的符號是"="。測試
例spa
int a = 1; //定義時直接賦值 int b; int c; b = c = 2; //能夠在一個語句內爲多個變量賦值 int d = b + 3; //變量運算後再賦值,先執行右邊,再執行左邊
Java支持加減乘除和求餘等基本數學運算。分別是如下幾種:htm
運算符blog |
說 明ip |
|
一元ci |
-數學 |
一元減,即取負table |
++ |
自增,如:++a等價於a = a + 1 |
|
-- |
自減,如:--a等價於a = a – 1 |
|
二元 |
+ |
加法,返回兩個操做數的和 |
- |
減法,返回兩個操做數的差 |
|
* |
乘法,返回兩個操做數的積 |
|
/ |
除法,返回兩個操做數的商 |
|
% |
取模,返回兩個操做數整除後的餘數 |
加法運算符:+
double a = 1.1; double b = 1.2; double sum = a + b; System.out.println(sum); //輸出2.3
減法運算符:-
double a = 2.2; double b = 1.1; double sub = a - b; System.out.println(sub); //輸出1.1
乘法運算符:*
int a = 11; double b = 1.2; double multiply = a * b; System.out.println(multiply); //輸出1.32
除法運算符:/
除法運算符有點特殊:若是運算的兩個值都是int,獲得的結果也是int類型,會把小數點直接去掉,也不會四捨五入
int a = 10; int b = 4; double c = a/b; System.out.println(c); //10初4原本結果是2.5,可是兩個int類型數相除結果是int類型數,儘管將結果值賦給了double, //但輸出結果變成了2.0,至關於運算完成時將小數點給去了,再轉換爲2.0 double a2 = 5.2; double b2 = 3.1; double c2 = a2/b2; System.out.println(c2); //兩個double值運算,輸出結果:1.6774193548387097 System.out.println(5 / 0.0); //除數爲double型0.0,輸出負無窮大 System.out.println(5 / 0); //除數爲0,運行時會報錯
求餘運算符:%
int a = 5; int b = 3; double c = 3.2; System.out.println(a%b); //輸出2 System.out.println(a%c); //1.7999999999999998 System.out.println(0%5); //輸出0 System.out.println(5%0); //運行會出錯
求負:-
int i = -1; int i2 = -i; System.out.println(i2); //輸出1
自加:++
int i = 1; i++; //至關於將i的值加1; System.out.println(i); //輸出2
自加符號既能夠放在變量前面,也能夠放在變量後面,放在前面先把操做數加1,再進行表達式的運算,放在後面則相反。
int i1 = 1; int i2 = 1; int i3 = i1++; //此時i3的值爲1,i1的值爲2;它是先將i1的值賦給了i3,再將i1加1; int i4 = ++i2; //此時i4的值爲2,i2的值也爲2;它是先將i2的值加1,再將值賦給i4;
自減:--
做用相似於自加
int i1 = 1; int i2 = 1; int i3 = i1++; //此時i3的值爲1,i1的值爲0;它是先將i1的值賦給了i3,再將i1減1; int i4 = ++i2; //此時i4的值爲0,i2的值也爲0;它是先將i2的值減1,再將值賦給i4;
關係運算符能夠測試兩個操做數之間的關係(但不會改變操做數的值),關係表達式的結果爲boolean型true/false:
運算符 |
說 明 |
== |
等於,檢查兩個操做數是否相等 |
!= |
不等於,檢查兩個操做數是否不相等 |
> |
大於,檢查左操做數是否大於右操做數 |
>= |
大於等於,檢查左操做數是否大於或等於右操做數 |
< |
小於,檢查左操做數是否小於右操做數 |
<= |
小於等於,檢查左操做數是否小於或等於右操做數 |
System.out.println(4 == 4); //結果爲true System.out.println(4 != 3); //結果爲true System.out.println(true == false); //結果爲false
邏輯運算符用於操做boolean類型的變量或常量
運算符 |
說 明 |
|
Java |
||
一元 |
! |
邏輯非(NOT) |
二元 |
& |
邏輯與(AND)(不短路) 左邊爲false,依然會運算右邊
|
| |
邏輯或(OR) 如左操做數爲true,依然運算右邊操做數 |
|
&& |
短路與 如左操做數爲false,則不運算右操做數 |
|
|| |
短路或 如左操做數爲true,則不運算右操做數 |
|
^ |
異或 當兩個操做數不一樣時返回true,相同則返回false |
看例子
System.out.println(!true); //結果爲false System.out.println(2 > 1 && 1 > 1); //結果爲false System.out.println(2 > 1 || 1 > 1); //結果爲true System.out.println(true ^ false); //結果爲true,異或,至關於把第一個前面一個值true取反,再進行「或」運算
下面咱們來看一下 |於||的區別
int a = 1; int b = 1; if(a == 1 | b++ > 1){ System.out.println(b); //輸出b的值爲2,按位或雖然|符號左邊結果爲true,但依然會執行|符號右邊的代碼 }
將|改成||
int a = 1; int b = 1; if(a == 1 || b++ > 1){ System.out.println(b); //輸出b的值爲1,||符號左邊結果爲true,不會再執行||符號右邊的代碼 }
它的通常形式是:
表達式1 ? 表達式2 : 表達式3
根據表達式1的結果來判斷執行表達式2仍是表達式3,若是表達式1的結果爲true,則執行表達式2,不然執行表達式3;
條件運算符在某些狀況下可以替代小型的if…else語句。
String s = 1 > 2 ? "1大於2" : "1不大於2"; System.out.println(s); //輸出 1不大於2
位運算符既參加運算的兩個數據,按二進制位進行運算。Java的位運算符有以下7個:按位與(&)、按位或(|)、按位非(~)、按位異或(^)、左移運算符(<<)、右移運算符(>>)、無符號右移運算符(>>>)。
具體介紹能夠參考下面這篇文章:
http://www.cnblogs.com/yezhenhan/archive/2012/06/20/2555849.html
不少狀況下,一個表達式由多個運算符組成,優先級決定運算符的計算順序:
優先級 |
運 算 符 |
1 |
括號: ()和[] |
2 |
一元運算符:-、++(前置)、--(前置)、! |
3 |
算術運算符:*、/、%、+和- |
4 |
關係運算符:>、>=、<、<=、==和!= |
5 |
邏輯運算符:&、|、&&和|| |
6 |
條件運算符:? : |
7 |
賦值運算符:=、*=、/=、%=、+=和-= |
儘管運算符有優先級,一個表達式中會根據表達式運算符的優先級進行前後運算,可是在實際編程中若是一個表達式很長也不會推薦這樣寫,而是分爲幾步寫,由於寫在一塊兒可讀性太差。