日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java編程入門(2.5):表達(dá)式

 yy99k 2017-09-14

這一節(jié)會(huì)更深入地探討表達(dá)式?;貞浺幌拢磉_(dá)式是一段用來(lái)表示或計(jì)算值的代碼。表達(dá)式可以是文字、變量、函數(shù)調(diào)用或者這些的組合,由 +、> 這樣的運(yùn)算符連接到一起。表達(dá)式的值可以賦給變量,在子程序調(diào)用中用作參數(shù),或者與其它的值組合成為更復(fù)雜的表達(dá)式。(這些值在某些情況下甚至可以被忽略掉,如果你想要這么干;這比你想象中更加常見(jiàn))。表達(dá)式是編程的基礎(chǔ)。到目前為止,本書都只是順帶提到了表達(dá)式。這一節(jié)會(huì)告訴你一個(gè)完整的故事(這里會(huì)忽略一些不常見(jiàn)的運(yùn)算符)。

表達(dá)式的基礎(chǔ)由文字(比如674、3.14、true 和 ‘X’)、變量和函數(shù)調(diào)用組成。還記得函數(shù)是一個(gè)帶返回值的子程序。你可能已經(jīng)看到過(guò)一些函數(shù)的例子,比如 TextIO 類的輸入程序以及 Math 類的數(shù)學(xué)計(jì)算函數(shù)。

Math 類還包含了一組數(shù)學(xué)常量,在數(shù)學(xué)表達(dá)式中非常有用:Math.PI 表示 π (圓周率)、 Math.E 表示 e(自然對(duì)數(shù)的基數(shù))。這些“常量”實(shí)際上都是 Math 類中 double 類型的成員變量。它們是數(shù)學(xué)常量的近似值,實(shí)際的精確值要求無(wú)限長(zhǎng)度的數(shù)字。標(biāo)準(zhǔn)的 Integer 類包含了一組與 int 數(shù)據(jù)類型相關(guān)的常量:Integer.MAX_VALUE 是最大的 int,2147483647;Integer.MIN_VALUE 是最小的 int,-2147483648。類似地,Double 類包含了一些與 double 類型相關(guān)的常量。Double.MAX_VALUE 是最大的 double 值,而 Double.MIN_VALUE 是最小的值。Double 還包含了表示無(wú)限的數(shù)值,Double.POSITIVE_INFINITY 和 Double.NEGATIVE_INFINITY。而特殊的 Double.NaN 表示未定義值。例如,Math.sqrt(-1)  的結(jié)果就是 Double.NaN。

文字、變量和函數(shù)調(diào)用都是簡(jiǎn)單表達(dá)式。通過(guò)運(yùn)算符可以將簡(jiǎn)單表達(dá)式組合成復(fù)雜表達(dá)式。運(yùn)算符包括 + 將兩個(gè)數(shù)值相加,> 比較兩個(gè)值大小,等等。當(dāng)表達(dá)式中包含了若干運(yùn)算符時(shí),就會(huì)出現(xiàn)優(yōu)先順序問(wèn)題,它決定了運(yùn)算符在計(jì)算式如何分組。例如,在表達(dá)式 “A + B * C” 中,B*C 會(huì)先計(jì)算,然后結(jié)果再與 A 相加。我們說(shuō),乘法  (*) 的優(yōu)先級(jí)比加法  (+) 高。如果默認(rèn)的優(yōu)先級(jí)順序不是你想要的,那么可以使用括號(hào)明確指定你期望的分組。例如,你可以使用”(A + B) * C” 表明希望先將 A 與 B 相加再乘以 C。

這一節(jié)的后面會(huì)對(duì)Java中的運(yùn)算符細(xì)節(jié)進(jìn)行詳細(xì)地解釋。Java提供了很多運(yùn)算符,我不會(huì)每個(gè)都進(jìn)行介紹,但是這里會(huì)給出大多數(shù)最重要的運(yùn)算符說(shuō)明。

2.5.1 算數(shù)運(yùn)算符

算數(shù)運(yùn)算符包括加法、減法、乘法和除法。它們的符號(hào)分別是 +、-、* 和  /。這些操作可以用于任意類型的數(shù)值:byte、short、int、long、float或double。(它們還可以用在 char 類型上,在這種情況下 char 被當(dāng)做 integer 使用;char 會(huì)被轉(zhuǎn)換成它的 Unicode 代碼,并代入算數(shù)運(yùn)算符操作。)當(dāng)計(jì)算機(jī)實(shí)際計(jì)算時(shí),計(jì)算中的兩個(gè)值必須是相同類型。如果你的程序告訴計(jì)算機(jī)輸入了兩個(gè)不同類型的值,那么計(jì)算機(jī)會(huì)將其中一個(gè)轉(zhuǎn)換成另一個(gè)的類型。例如,計(jì)算 37.4 + 10 這個(gè)表達(dá)式時(shí),計(jì)算機(jī)會(huì)將整數(shù) 10 轉(zhuǎn)換成實(shí)數(shù) 10.0,然后計(jì)算 37.4 + 10.0。這被稱為類型轉(zhuǎn)換。通常,你不必關(guān)心表達(dá)式中的類型轉(zhuǎn)換,因?yàn)橛?jì)算機(jī)會(huì)替你自動(dòng)完成。

兩個(gè)數(shù)值(如果必要,會(huì)對(duì)其中一個(gè)進(jìn)行類型轉(zhuǎn)換)計(jì)算后的結(jié)果與其類型一致。如果兩個(gè) int 相乘,結(jié)果是 int;兩個(gè) double 相乘,結(jié)果是 double,這是可預(yù)見(jiàn)的結(jié)果。但是,當(dāng)你使用 / 時(shí)必須非常小心。如果兩個(gè) int 相除,結(jié)果是 int;如果商是分?jǐn)?shù),會(huì)被舍去。例如,7/2 結(jié)果是 3,而不是 3.5。假設(shè)N是整型變量,那么 N/100 結(jié)果不是整數(shù),并且當(dāng) N 大于 1 時(shí) 1/N 等于 0!這是很多常見(jiàn)編程錯(cuò)誤的根源??梢园哑渲幸粋€(gè)運(yùn)算符改為實(shí)數(shù),強(qiáng)迫計(jì)算機(jī)輸出實(shí)數(shù):比如,當(dāng)計(jì)算機(jī)處理 1.0/N 時(shí),首先把N轉(zhuǎn)成實(shí)數(shù),從而與 1.0 的類型匹配,這樣得到的結(jié)果就是實(shí)數(shù)。

Java還提供了計(jì)算除法操作的余數(shù)。計(jì)算余數(shù)的運(yùn)算符為 %。如果 A 和 B 都是整數(shù),那么 A % B 表示 A 除以 B 的余數(shù)。(然而,對(duì)于負(fù)數(shù)Java中的 % 與數(shù)學(xué)計(jì)算中的“取?!辈僮鞑煌?。在Java中,如果 A 或 B 為負(fù)數(shù),那么 A % B 的結(jié)果也是負(fù)數(shù))。例如,7 % 2 等于 1,34577 % 100 等于 77,50 % 8 等于 2。% 常被用來(lái)測(cè)試給定整數(shù)是奇數(shù)還是偶數(shù):如果 N % 2 等于0,那么N是偶數(shù);如果 N % 2 等于 1,那么N是奇數(shù)。一般來(lái)說(shuō),你可以通過(guò) N % M 結(jié)果是否為 0,判斷整數(shù)N是否可以被M取模。

% 運(yùn)算符也適用于實(shí)數(shù)。通常,A % B 表示從 A 中移除多個(gè) B 后遺留的數(shù)值。例如,7.52 % 0.5 等于 0.02。

最后,你還可能需要一元減法運(yùn)算符,得到一個(gè)數(shù)的負(fù)數(shù)。例如,-X 等價(jià)于 (-1)*X。出于完備性考慮,Java還提供了一元加法運(yùn)算符,例如 +X。景觀在實(shí)際中沒(méi)有任何作用。

順便說(shuō)一下,+ 操作還可以用來(lái)向 String 字符串連接任意類型的值。當(dāng)你使用 + 連接字符串時(shí),這是另一種形式的類型轉(zhuǎn)換,任意的對(duì)象都會(huì)自動(dòng)轉(zhuǎn)換為 String。

2.5.2 增加和減少

你會(huì)發(fā)現(xiàn),為變量加 1 是編程中極其常見(jiàn)的操作,為變量減 1 也一樣??梢韵裣旅孢@樣賦值為變量加 1:

counter = counter + 1;goalsScored = goalsScored + 1;

x = x + 1 語(yǔ)句的結(jié)果是,用變量 x 原來(lái)的值加 1 后再賦值給變量 x。也可以用 x++ 得到相同的效果(或者你可能會(huì)喜歡寫成 ++x)。實(shí)際上,這么寫會(huì)改變 x 的值,得到的效果與 “x = x + 1″ 一樣。上面的兩個(gè)語(yǔ)句可以改為:

counter++;goalsScored++;

類似地,你也可以寫 x–(或 –x)從 x 中減1。也就是說(shuō),x– 與 x = x - 1 執(zhí)行了相同的計(jì)算。向變量加 1 稱為變量遞增,從變量減 1 稱為變量遞減。運(yùn)算符 ++ 和 — 分別被稱為遞增運(yùn)算符和遞減運(yùn)算符。這些運(yùn)算符可以用于任何數(shù)值類型的變量,以及char類型的變量( ‘A’++  結(jié)果是 ‘B’)。

通常,運(yùn)算符 ++ 和 — 用在語(yǔ)句中,比如 “x++;”  或 “x–;”。這些語(yǔ)句是改變 x 值的指令。然而,將x++、++x、x–或–x作為表達(dá)式或表達(dá)式的一部分也是合法的。也就是說(shuō),你可寫出下面的代碼:

y = x++;y = ++x;TextIO.putln(--x);z = (++x) * (y--);

“y = x++;”的效果是 x 變量加1,然后把某個(gè)值賦給 y。賦給 y 的值是表達(dá)式 x 加 1 之前的值。因此,假設(shè) x 等于 6,那么 “y = x++;” 執(zhí)行后,會(huì)將 x 變?yōu)?7,但是 y 的值被賦為 6。因?yàn)橘x給 y 的是 x 加 1 前的舊值。而另一種寫法,++x 會(huì)得到加1后的新值。所以,還是假設(shè) x 等于 6, ”y = ++x;” 會(huì)把 x 和 y 都變?yōu)?7。運(yùn)算符 — 也是類似的用法。

特別要注意,x = x++; 這個(gè)語(yǔ)句沒(méi)有改變 x 的值!這是因?yàn)橘x給 x 的是 x 的舊值,即在語(yǔ)句執(zhí)行前 x 的值。最終結(jié)果是,x 增加了 1,但是馬上被改回了原來(lái)的值!你還需要記住,x++ 不等同 于 x + 1。表達(dá)式 x++ 改變了 x 的值,而 x + 1 沒(méi)有改變。

這里會(huì)讓你感到困惑,我從學(xué)生程序中看到很多由此造成的bug。我的建議是:不要寫這種讓人困惑的代碼。++ 和 — 只在單獨(dú)的語(yǔ)句使用,不要用成表達(dá)式。在接下來(lái)的示例中,我會(huì)遵循這條建議。

2.5.3 關(guān)系運(yùn)算符

Java提供了布爾比例和布爾表達(dá)式表示條件,條件結(jié)果可以為 true 或 false。組織布爾表達(dá)式可以通過(guò)關(guān)系運(yùn)算符比較兩個(gè)值。

A == B Is A 'equal to' B?A != B Is A 'not equal to' B?A < b="" is="" a="" 'less="" than'="" b?a=""> B Is A 'greater than' B?A <= b="" is="" a="" 'less="" than="" or="" equal="" to'="" b?a="">= B Is A 'greater than or equal to' B?
A == B A“等于”B?A != B A“不等于”B?A < b="" a“小于”b?a=""> B A“大于”B?A <= b="" a“小于等于”b?a="">= B A“大于等于”B?

這些運(yùn)算符可以比較任意數(shù)值類型的數(shù)值。還可以用來(lái)比較char類型的值。對(duì)字符串來(lái)說(shuō),< 和="">被定義為根據(jù)字符的 Unicode值 進(jìn)行比較(結(jié)果并不是完全按照字母順序比較,這可能不是你想要的。所有大寫字母小于小寫字母。)

使用布爾表達(dá)式時(shí)你應(yīng)當(dāng)記住,對(duì)計(jì)算機(jī)而言,布爾值并沒(méi)有什么特殊的地方。在下一章中,你會(huì)看到如何在循環(huán)和分支中使用它們。你可以像賦值給數(shù)字變量一樣,給布爾變量賦布爾值。函數(shù)會(huì)返回布爾值。

順帶說(shuō)一下,運(yùn)算符 == 和 != 也可以用來(lái)比較布爾值。在某些情況下這是非常有用的。例如,你可以看下面這段代碼:

boolean sameSign;sameSign = ((x > 0) == (y > 0));

關(guān)系運(yùn)算符 <、>、<= 和="">= 不能比較String值。你可以合法地使用 == 和 != 來(lái)比較字符串,但是由于對(duì)象行為的差別,可能不會(huì)得到你期望的結(jié)果。(== 運(yùn)算符可以檢查兩個(gè)對(duì)象的內(nèi)存地址是否相同,而不是判斷對(duì)象中值是否相等。對(duì)某些對(duì)象,在某種情況下,你可能想要做類似的檢查——但字符串不行。下一章我會(huì)再討論這個(gè)話題。)相反地,你要使用 equals()、equalsIgnoreCase() 和 compareTo(),這些在2.3.3章節(jié)中進(jìn)行了討論,如何比較兩個(gè)字符串。

另一個(gè) == 和 != 不起作用的地方是與 Double.NaN 比較。這個(gè)常量表示 double 類型的未定義值。無(wú)論 x 的值是否為 Double.NaN,x == Double.NaN 和 x != Double.NaN 都會(huì)返回 false!要檢測(cè)實(shí)數(shù)類型的值 x 是否為 Double.NaN,可以使用函數(shù) Double.isNaN(x) 返回判斷結(jié)果。

2.5.4  布爾運(yùn)算符

在英語(yǔ)中,復(fù)雜條件通過(guò) and、or 和 not 組合在一起。例如,“If there is a test and you did not study for it…”,and、or 和 not 都是布爾運(yùn)算符,在Java中也同樣存在。

在Java中,布爾運(yùn)算符“and”表示為 &&。&& 運(yùn)算符用來(lái)結(jié)合 2 個(gè)布爾值。結(jié)果還是 1 個(gè)布爾值。如果兩個(gè)值都是 true,那么結(jié)果為 true;如果其中一個(gè)為 false,那么結(jié)果為 false。例如,如果 x 等于 0 并且 y 等于 0,“(x == 0) && (y == 0)” 結(jié)果為true。

布爾運(yùn)算符“or”在Java中表示為 ||。(由兩個(gè)垂直的行字符 | 組成。)如果 A 或 B 其中一個(gè)為 true 或者都為 true,那么表達(dá)式 “A || B” 結(jié)果為 true。只有 A 和 B 同時(shí)為 false 時(shí),“A || B” 結(jié)果為 false。

運(yùn)算符 && 和 || 被稱為短路版本的布爾運(yùn)算符。也就是說(shuō),&& 或 || 的第二個(gè)操作符不一定會(huì)計(jì)算??紤]下面這個(gè)測(cè)試

(x != 0) && (y/x > 1)

假設(shè) x 的值實(shí)際為 0,在這種情況下,y/x 是未定義的觸發(fā)運(yùn)算(除0)。然而,計(jì)算機(jī)永遠(yuǎn)不會(huì)執(zhí)行這個(gè)觸發(fā),因?yàn)楫?dāng)計(jì)算機(jī)對(duì) (x != 0) 計(jì)算結(jié)果時(shí),發(fā)現(xiàn)結(jié)果為 false。這時(shí)計(jì)算機(jī)知道  ((x != 0) && 任意表達(dá)式) 一定會(huì)為 false。因此,它不會(huì)再計(jì)算對(duì)第二個(gè)運(yùn)算符求值。運(yùn)算被短路,從而避免了除0的情況。(這個(gè)聽(tīng)起來(lái)有點(diǎn)偏技術(shù)性,事實(shí)也是如此。但有時(shí)候,會(huì)讓編程生活更輕松些。)

布爾運(yùn)算符“not”是一元運(yùn)算符。在Java中用 ! 表示,寫在單個(gè)運(yùn)算對(duì)象的前面。例如,假設(shè) test 是一個(gè)布爾變量,那么

test = ! test;

將會(huì)對(duì) test 的值取反,從 true 變?yōu)?false 或者從 false 變?yōu)?true。

2.5.5 條件運(yùn)算符

任何優(yōu)秀的編程語(yǔ)言都有一些漂亮的小功能。雖然不是必須的功能,但可以讓你在使用時(shí)感覺(jué)很酷。Java也有,條件運(yùn)算符中的三元運(yùn)算符。它有 3 個(gè)操作數(shù),有 2 個(gè)部分:,? 和 : 組合在一起。三元運(yùn)算符形式如下:

boolean-expression ? expression1 : expression2

計(jì)算機(jī)會(huì)檢測(cè)布爾表達(dá)式的值。如果值為 true,會(huì)計(jì)算 expression1,否則計(jì)算 expression2。例如:

next = (N % 2 == 0) ? (N/2) : (3*N+1);

如果N是偶數(shù),會(huì)把 N/2 賦給 next(即 N % 2 == 0 為 true);如果N是基數(shù),會(huì)把 (3*N+1) 賦給 next(這里的括號(hào)不是必須的,但是會(huì)讓表達(dá)式更容易理解)。

2.5.6  賦值運(yùn)算符和類型轉(zhuǎn)換

你可能已經(jīng)對(duì)賦值表達(dá)式非常熟悉,使用 “=” 將表達(dá)式賦值給變量。實(shí)際上,在某種意義上 = 也是運(yùn)算符,可以將它用作表達(dá)式或者作為復(fù)雜表達(dá)式一部分。表達(dá)式 A=B 與向 A 賦值的語(yǔ)句作用相同。因此,如果你想要把 B 的值賦給 A,同時(shí)判斷值是否為 0,可以這么寫:

if ( (A=B) == 0 )...

通常,我會(huì)強(qiáng)調(diào)不要那么做!

通常,表達(dá)式中右邊的類型必須和左邊一致。然而,在某些情況下,計(jì)算機(jī)會(huì)對(duì)表達(dá)式的值自動(dòng)轉(zhuǎn)換,以匹配變量的類型。比如在數(shù)值類型 byte、short、int、ong、float、double 中,列表中靠前的類型數(shù)值可以自動(dòng)轉(zhuǎn)換為列表中靠后的類型。

int A;double X;short B;A = 17;X = A; // OK; A is converted to a double //OK;A被自動(dòng)轉(zhuǎn)換為double類型B = A; // illegal; no automatic conversion //非法;不能從int自動(dòng)轉(zhuǎn)換為short // from int to short

在不影響語(yǔ)義的情況下,轉(zhuǎn)換應(yīng)當(dāng)自動(dòng)進(jìn)行。任何int應(yīng)當(dāng)可以被轉(zhuǎn)換為數(shù)值相同的 double 類型。然而,int 值中有一些超過(guò)了short 類型的合法范圍。比如不能將 100000 轉(zhuǎn)為 short,因?yàn)?short 的最大值是 32767.

在某些情況下,比如在不能自動(dòng)轉(zhuǎn)換的情況下你可能想要進(jìn)行強(qiáng)制轉(zhuǎn)換。這里,你需要使用類型轉(zhuǎn)換。類型轉(zhuǎn)換可以把類型名放在括號(hào)里,放在你需要轉(zhuǎn)換的數(shù)值前面。例如:

int A;short B;A = 17;B = (short)A; // OK; A is explicitly type cast // OK;A可以顯示地把數(shù)值轉(zhuǎn)換為short類型 // to a value of type short

你可以將任何數(shù)值類型轉(zhuǎn)換為其他數(shù)值類型。然而,你應(yīng)當(dāng)注意,轉(zhuǎn)換過(guò)程中可能會(huì)改變數(shù)值。例如,(short)100000 等于 -31072。(-31072 是通過(guò) 100000 丟掉2個(gè)字節(jié),保留 4 個(gè)字節(jié)得到的 short 值——轉(zhuǎn)換中會(huì)丟失 2 個(gè)字節(jié)的信息。)

當(dāng)你將實(shí)數(shù)轉(zhuǎn)為整型時(shí),小數(shù)部分被丟掉了。例如,(int)7.9453 等于 7。另一個(gè)類型轉(zhuǎn)換的例子,從 1 到 6 范圍中得到隨機(jī)整數(shù)。函數(shù) Math.random() 會(huì)返回 0.0 到 0.9999… 之間的實(shí)數(shù),因此 6*Math.random() 的結(jié)果在 0.0 和 5.999… 之間。類型轉(zhuǎn)換操作符 (int) 可以用來(lái)將結(jié)果轉(zhuǎn)為整形:(int)(6*Math.random())。因此,(int)(6*Math.random()) 結(jié)果會(huì)得到 0、1、2、3、4、5 之間的某個(gè)整數(shù)。要得到 1 到 6 之間的隨機(jī)數(shù),可以加 1:”(int)(6*Math.random()) + 1″。(6*Math.random() 周圍的括號(hào)是必須的,因?yàn)橛美ㄌ?hào)來(lái)保證運(yùn)算的優(yōu)先順序;如果沒(méi)有括號(hào),類型轉(zhuǎn)換運(yùn)算符只能對(duì) 6 起效)。

char 類型與整型幾乎等價(jià)。你可以將 char 類型賦值給任意整型變量。你還可以將 0 到 65535 內(nèi)的常量賦值給 char 變量。你還可以顯示地在 char 和數(shù)值型之間進(jìn)行類型轉(zhuǎn)換,比如 (char)97 得到 ‘a(chǎn)’,(int)’+’ 是 43,(char)(‘A’ + 2) 等于 ‘C’。

String 和其它類型之間的不能進(jìn)行類型轉(zhuǎn)換。任意類型轉(zhuǎn)換成字符串的一種方法,可以將他們與一個(gè)空字符串連接。例如,”' + 42 可以得到字符串 “42″。但是還有更好的辦法,使用 String 類中的靜態(tài)方法 String.valueOf(x)。String.valueOf(x) 返回輸入 x 轉(zhuǎn)換得到的 String。例如,String.valueOf(42) 返回字符串 “42″。而且,如果 ch 是一個(gè) char 變量,那么 String.valueOf(ch) 返回長(zhǎng)度為 1 的字符串,字符串中內(nèi)容是 ch 變量中的唯一一個(gè)字符。

也可以將特定字符串轉(zhuǎn)換為其它類型的值。例如,字符串”10″ 可以被轉(zhuǎn)轉(zhuǎn)換為整型值 10,而字符串 “17.42e-2″ 可以轉(zhuǎn)換為 double 值 0.1742。在Java中,這些轉(zhuǎn)換可以由內(nèi)建方法完成。

標(biāo)準(zhǔn)的 Integer類 提供了靜態(tài)成員函數(shù),可以將 String 轉(zhuǎn)為 int。特別地,如果 str 是任意的 String 表達(dá)式,Integer.parseInt(str) 會(huì)試著將str的值轉(zhuǎn)為int類型。例如 Integer.parseInt(“10″) 得到 int 值 10。如果 Integer.parseInt 傳入的參數(shù)是非法的 int 值,那么會(huì)返回錯(cuò)誤。

類似地,標(biāo)準(zhǔn)的 Double 類提供了 Double.parseDouble方法。如果 str 是 String 類型,調(diào)用 Double.parseDouble(str) 方法會(huì)試圖將 str 轉(zhuǎn)為 double 類型的值。當(dāng) str 表示的是非法 double 值,就會(huì)返回錯(cuò)誤。

讓我們會(huì)到賦值語(yǔ)句。Java有許多賦值運(yùn)算符變種,用來(lái)保存類型。例如,”A += B” 等價(jià)于 “A = A + B”。除了關(guān)系運(yùn)算符,每個(gè)Java運(yùn)算符都可以處理 2 個(gè)操作數(shù),這樣就得到了 1 個(gè)類似的賦值運(yùn)算符。例如:

x -= y; // same as: x = x - y; 等價(jià)于:x = x - y;x *= y; // same as: x = x * y; 等價(jià)于:x = x * y;x /= y; // same as: x = x / y; 等價(jià)于:x = x / y;x %= y; // same as: x = x % y; 等價(jià)于:x = x % y;q &&= p; // same as: q = q && p; (for booleans q and p) 等價(jià)于:q = q && p; (q和p都是布爾型)

組合式賦值運(yùn)算符 += 甚至可以用于String?;貞浺幌?,+ 運(yùn)算符可以將 string 作為其中的一個(gè)操作數(shù),表示連接操作。既然 str += x 等價(jià)于 str = str + x,那么當(dāng) += 將 string 作為操作數(shù)時(shí),這個(gè)操作就把右邊的操作數(shù)附到字符串的結(jié)尾。例如,如果 str 的值是 “tire”,那么語(yǔ)句 str += ’d'; 就會(huì)返回 str 值為 “tired”。

2.5.7  優(yōu)先規(guī)則

如果在表達(dá)式中使用了多個(gè)運(yùn)算符,并且沒(méi)有使用括號(hào)來(lái)顯示地指定計(jì)算順序,那么你就需要考慮優(yōu)先規(guī)則來(lái)確定實(shí)際的計(jì)算順序。(建議:不要讓你自己和程序的閱讀者產(chǎn)生困惑,大方地使用括號(hào)吧。)

下面是本章討論過(guò)的運(yùn)算符列表,按照優(yōu)先級(jí)從高(第一個(gè)計(jì)算)到低(最后計(jì)算)順序排列:

Unary operators: 一元運(yùn)算符: ++, --, !, unary -, unary +, type-castMultiplication and division: 乘法和除法: *, /, %Addition and subtraction: 加法和減法: +, -Relational operators: 關(guān)系運(yùn)算符: <,>, <=,>=Equality and inequality: 相等和不等: ==, !=Boolean and: 布爾與: &&Boolean or: 布爾或: ||Conditional operator: 條件運(yùn)算符: ?:Assignment operators: 賦值運(yùn)算符: =, +=, -=, *=, /=, %=

同一行的運(yùn)算符優(yōu)先級(jí)相等。在沒(méi)有括號(hào)的情況下,優(yōu)先級(jí)相同的運(yùn)算符串在一起,一元運(yùn)算符和賦值運(yùn)算符的計(jì)算順序是從右到左,而剩下的其它運(yùn)算符計(jì)算順序是從左到右。例如 A*B/C 表示 (A*B)/C,而 A=B=C 表示 A=(B=C)。(考慮到 B=C 作為表達(dá)式的同時(shí)也進(jìn)行了給 B 賦值的運(yùn)算,你能看出A=B=C表達(dá)式是如何計(jì)算的嗎?)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多