天天看點

《Java和Android開發學習指南(第2版)》——第2章,第2.8節操作符

本節書摘來自異步社群《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和Android開發學習指南(第2版)》——第2章,第2.8節操作符

在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);

繼續閱讀