Java運算符共包括這幾種:算術運算符、比較運算符、位運算符、邏輯運算符、賦值運算符和其他運算符。(該圖來自網絡)

簡單的運算符,就不過多介紹使用了,可自行測試。關於賦值運算,可以結合算術運算和位運算來簡化代碼。
int a = 5;
a += a; // a = a + a;
a /= a; // a = a / a;
a %= a; // a = a % a;
a &= 6; // a = a & 6;
//.....
理解自增自減運算符
自增自減分為前置和后置。例如:i++ ++i i-- --i。 要明確一點,前置與后置的自增或自減運算符若沒運用到表達式中,那么無區別;若是參與到表達式運算中,只需記住:誰在前面就先執行誰。
int a = 0;
a++; //或者++a
System.out.println(a); // a輸出1
//最常見的for循環中,在迭代條件中,i++ 和 ++i無區別,因為沒有用於表達式。
將前置自增和后置自增運用到表達式
int a = 5;
System.out.println(a--); //5,先打印a的值,之后a自減1
System.out.println(a); //4
System.out.println(++a); //5, 先對a值自增,然后打印a值
復雜一點,更好的理解前置和后置的區別:
int a = 6;
int b = 8; int c = ++a + b-- - a-- + --b + b++ + --a; System.out.printf("%d|%d|%d", a,b,c); // 5,7,25
使用圖片來理解會更加一目了然。

再隨便給一個,按照圖示方式去理解自增自減。
int a = 6,b = 8;
int c = (--a) + (a--) - (b--) + (++b) + (a++) - (b--); //加括號更容易閱讀
// int c = --a + a-- - b-- + ++b + a++ - b--;
System.out.printf("%d|%d|%d", a,b,c); // 5,7,6
}

通過圖片的理解方式去學習自增自減,無論是前置還是后置,無論會有多復雜,都可以很有條理的解決。 當然,寫程序時別寫這么復雜,因為沒意義,這里僅是用於理解。
理解位運算符
程序中的所有數在內存中都是以二進制的形式存儲,位運算符就是直接對二進制數進行操作運算,速度很快。 位運算符包括 & | ~ ^ << >> >>>。 下面會一一介紹。 其中二進制數的1表示真, 0表示假。
按位與(&):若相對應位都為1,則為1,否則為0。
15 & 5 = 5 16 & 12 = 0 18 & 14 = 2
15 1 1 1 1 16 1 0 0 0 0 18 1 0 0 1 0
----------- ------------- -------------
5 0 1 0 1 12 0 1 1 0 0 14 0 1 1 1 0
----------- ------------- -------------
0 1 0 1 (十進制為5) 0 0 0 0 0 (十進制為0) 0 0 0 1 0 (十進制為2)
按位或(|):若相對應位其中一個為1,則為1,否則為0。
9 | 11 = 11 5 | 20 = 21
9 1 0 0 1 5 0 0 1 0 1
----------- -------------
11 1 0 1 1 20 1 0 1 0 0
----------- -------------
1 0 1 1 (十進制為11) 1 0 1 0 1 (十進制為21)
按位異或(^):若相對應位互不相同,則為1,否則為0。
9 ^ 11 = 2 5 ^ 20 = 17
9 1 0 0 1 5 0 0 1 0 1
----------- -------------
11 1 0 1 1 20 1 0 1 0 0
----------- -------------
0 0 1 0 (十進制為2) 1 0 0 0 1 (十進制為17)
按位取反(~)
假設要取反的數為n, 那么公式如下:
~n = -(n+1),正整數按位取反的數是它本身+1的負數。
~ -n = | -n + 1 |, 負整數按位取反的數是它本身+1的絕對值。 例如:~10 = -11; ~ -11 = 10;
按位左移和右移(<< >>):左移表示二進制數向左移動指定位數,低位補相應0填充。 右移表示二進制數向右移動指定位數,高位補相應0填充。
左移運算原理
11 0 0 0 0 1 0 1 1 65 1 0 0 0 0 0 1
<<2 0 0 1 0 1 1 0 0 (低位補相應0) <<3 1 0 0 0 0 0 1 0 0 0
--------------- -------------------
101100 = 2^5 + 2^3 + 2^2 = 44 1000001000 = 2^9 + 2^3 = 520
右移運算原理
75 1 0 0 1 0 1 1 65 1 0 0 0 0 0 1
>>6 0 0 0 0 0 0 1 >>3 0 0 0 1 0 0 0 [低位移除 0 0 1, 高位補相應位數0]
------------- ---------------
0001 = 1 1000 = 8
左移與右移的運算規律總結:左移幾位就乘以2的幾次方 , 右移幾位就除以2的幾次方。
4<<5 為例,就是4 * 2^5 = 4 * 32 ,很快得出結果128
10>>2 ,10除以 2的2次方 10/4 = 2。
若想快速獲取2的N次方,只需 1<<N 即可,例如 1<<10 = 2 ^ 10 = 1024
理解邏輯運算符
邏輯運算符一般使用:邏輯與(&&)、邏輯或(||)和邏輯非(!)。邏輯運算符也稱為短路運算。
&&表示and, 兩邊操作數都為真,才為真,否則為假。左邊為假時,不再計算右邊。 true && true = true, false && true = false
||表示or, 兩邊操作數其中一個為真,則為真,否則為假。左邊為真時,不再計算右邊。 true || false = true, false || false = false
!表示取反,若操作數為真,則為假;操作數為假,則為真。 !true = false !false = true。 取反邏輯很有用,可以簡化邏輯操作。
//判斷閏年 能整除400 或者 能整除4但不能整除100
if((year % 400 == 0) || (year % 4 == 0) && year % 100 != 100)
//求出能同時整除5和7的數
if(num % 5 == 0 && num % 7 == 0) //求出能整除6 或者 整除8的數 if(num % 6 == 0 || num % 8 == 0) //求出能整除 7 但不能整除9的數 if(num % 7 == 0 && num % 9 != 0) //某些boolean方法, 例如判斷質數。 boolean isPrime(int i) {} //通過取反操作,求某個范圍中不是質數的數。 !true = false,不執行。 !false = true,執行。 if(!isPrime()) {}
除了以上之外,另外說一下按位異或^用於邏輯運算。
//要么整除5,要么整除8,但不能同時整除5和8。使用異或^來完成互斥邏輯
if(num % 5 == 0 ^ num % 8 == 0)
//T ^ T = false, T ^ F = true, F ^ T = true
