本節書摘來自異步社群《java和android開發學習指南(第2版)》一書中的第2章,第2.8節操作符,作者 【加】budi kurniawan,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
2.8 操作符
計算機程式是實作某一功能的操作彙集在一起的一個集合。有很多種類型的操作,包括加法、減法、乘法、除法和位移。在本小節中,我們将學習各種java操作。
一個操作符會對一個、兩個或三個操作數執行操作。操作數是操作的目标,而操作符則是表示動作的一個符号。例如,如下是加法操作:
在這個例子中,x和4是操作數,+是操作符。
一個操作符可能傳回一個結果,也可能不傳回結果。
操作符和操作數的任何合法的組合,叫作表達式(expression)。例如,x+4是一個表達式。一個布爾表達式會得到真或假;一個整數表達式會得到一個整數;浮點數表達式的結果是一個浮點數。
隻需要一個操作數的操作符叫作一進制操作符(unary operator),java中有幾個一進制操作符。二進制操作符(binary operator)接受兩個操作數,這是java操作符中最常見的類型。還有一個三元操作符(ternary operator)? :,它需要3個操作數。
在java中,操作符分為6類:
一進制操作符。
算術操作符。
關系和條件操作符。
位移和邏輯操作符。
指派操作符。
其他操作符。
下面分别介紹每一種操作符。
2.8.1 一進制操作符
一進制操作符在一個操作數上起作用。有6個一進制操作符,本節中将一一介紹。
一進制減操作符
一進制減操作符傳回其操作數的負值。操作數必須是一個數字值,或者是一個數值基本類型的變量。例如,在下面的代碼中,y的值是-4.5;
一進制加操作符
一進制加操作符傳回其操作數的值。操作數必須是一個數值類型,或者是一個數值類型的變量。例如,在如下的代碼中,y的值是4.5。
這個操作符沒有那麼重要,因為不使用它也不會有什麼差别。
自增操作符++
自增操作符将其操作數增加1。操作數必須是一個數值基本類型的變量。操作符可以出現在操作數之前或之後。如果操作符出現在操作符之前,它叫作字首自增操作符。如果它寫在操作數之後,叫作字尾自增操作符。
作為例子,下面展示了一個字首自增操作符:
然而,如果在同一個表達式中,自增操作符的結果需要指派給另一個變量,那麼,字首操作符和字尾操作符之間就存在差異了。考慮如下的例子:
在指派之前,使用了字首自增操作符。x自增到5,并且随後将其值複制給y。
檢視一下如下的字尾自增操作符的用法。
使用字尾自增操作符,在将操作數(x)的值指派給另一個變量(y)之後,才将操作數的值加1。
注意,自增操作符對于int類型來說是最常用的。它對于其他的數字基本類型(例如float和long)來說,也是适用的。
自減操作符--
自減操作符将操作數的值減去1。操作數必須是數值基本類型的一個變量。和自增操作符類似,它也有字首自減操作符和字尾自減操作符。例如,如下的代碼将x的值自減,并将其指派給y。
``
int x = 4;
int y = --x;
// x = 3; y = 3
int y = x--;
// x = 3; y = 4
boolean x = false;
boolean y = !x;
// at this point, y is true and x is false
int j = 2;
int k = ~j; // k = -3; j = 2
0000 0000 0000 0000 0000 0000 0000 0010
對其按位取反之後,得到
1111 1111 1111 1111 1111 1111 1111 1101
byte x = 3;
int y = x + 5; // y = 8
要確定接受加法結果的變量有足夠的容量。例如,在如下的代碼中,k的值是-294967296而不是40億。
int j = 2000000000; // 2 billion
int k = j + j; // not enough capacity. a bug!!!
如下的代碼則像預期的那樣工作:
long j = 2000000000; // 2 billion
long k = j + j; // the value of k is 4 billion
int x = 2;
int y = x – 1; // y = 1
int y = x * 4; // y = 16
int y = x / 2; // y = 2
int y = x / 3; // y = 1
boolean x = true;
boolean y = true;
boolean z = x != y;
9 < 6
9 > 6
9 <= 6
9 >= 9
(5 < 3) && (6 < 9)
(8 < 4) ? 2 : 4
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 1000
0000 0000 0000 0000 0000 0000 0001 0000
x -= 5等同于x = x - 5
x <<= 5等同于x = x << 5
x &= 5得到的結果和x = x & 5相同
0xffff & 0x0000 = 0x0000
0xf0f0 & 0xffff = 0xf0f0
0xffff | 0x000f = 0xffff
0xfff0 ^ 0x00ff = 0xff0f
true & true = true
true & false = false
true | false = true
false | false = false
true ^ true = false
false ^ false = false
false ^ true = true
int d = (a + b) * c;
int x = 5;
int y = 5;
boolean z = x * 5 == y + 20;
boolean z = (x * 5) == (y + 20);
byte x = 5;
byte y = -x; // error
byte y = (byte) –x;
short x = 200;
short y = 400;
short z = x + y;
short z = (short) (x + y);