6.操作符與表達式

操作符(Operator)

也稱為運算符,比如 + - * / 這些符號都是操作符

表達式(Expression)

是一個由數(shù)值和操作符組成的式子。把
所有的變量的值代入表達式,計算出的最終的值,稱為表達式的
值。

算術操作符

操作符 名稱 作用 
+       加  加法運算
-       減  減法運算
*       乘  乘法運算
/       除  除法運算
%       模  模運算

整型的算術運算

假定在以下式子中,a,b 為 int 型。
a + b 求和
a - b 求差
a * b 求積
a / b 求商 (結果不保留小數(shù))
a % b 求余
規(guī)定兩個 int 型在算術運算后,結果仍為 int 型。運算規(guī)則和小
學算術基本一樣,下面只需要解釋一下除法和模運算
(1) 整型的除法運算,結果舍去小數(shù)部分
(2) 整型的模運算,結果為余數(shù)

浮點型的算術運算

對于小數(shù)的算術運算,規(guī)則也是類似的。重點在于它的除法和模運算
(1) 浮點型的除法運算,結果保留小數(shù)部分
(2) 浮點型的模運算,結果為余數(shù)

類型提升
int a = 14; double b = 5.0; System.out.println( "結果為: " + ( a / b) );
規(guī)定:當 int 型與 double 型混合運算時,把 int 型視為 double型,稱為類型的提升

這是因為,double 型是可以兼容整數(shù)的表示的,所以都提升為double 型來運算比較好,不會丟失數(shù)據(jù)。所以,上式 a/b 的結果
按 double/double 來進行,結果為 2.8。

混合運算與優(yōu)先級

當一個式子中包含多種符號時,需要考慮優(yōu)先級問題
a* b + c / d
在這個式子里有 3 種運算符:乘、加、除。那么,在運算的時候,誰先執(zhí)行、誰后執(zhí)行是一個要考慮的問題。和直觀理解的一致,
乘、除的優(yōu)先級是略高于加的

在 Java 里規(guī)定了
* 和 / 的優(yōu)先級要高于 + ,所以才有了上面的結果。

關系操作符

操作符 名稱
   <   小于
   <=  小于或等于
   >   大于
   >=  大于或等于
   ==  等于
   !=  不等于
關系操作符的運算

對于關系表達式,只需要把相應的值代入式子,從邏輯上判斷一下。
如果是成立的,則值為 true;如果不成立,則值為 false。
int a = 10; System.out.println (" 結果: " + ( a < 5) );

在 println 里的表達式最好加上小括號,以顯式地指定運算的優(yōu)先級。

注意事項

(1) 操作符是一個整體,中間不能加空格
例如 >= <= == !=
(2) 對于初學者來說,注意區(qū)分 == 和 =
編程并不是數(shù)學,不要把數(shù)學的習慣帶過來。當判斷是否相等時,要用==來判斷

邏輯操作符

操作符 名稱   作用 
&&     邏輯與 并且
||     邏輯或 或者
!      邏輯非 非
邏輯與 &&

這個操作符用于表示“并且”的關系。形式如下,
a && b
其中,a,b 均為 boolean 類型。當 a 成立并且 b 成立時,結果才成立(true)。否則,結果不成立(false)。

通俗地講,就是表示日常生活中“并且”的邏輯。比如,一件事情需要 a,b 同時在場才能處理,那就是并且的關系。

邏輯或 ||

這個操作符用于表示“或者”的關系。形式如下,
a || b
當 a 成立或者成立時,結果成立(true)。否則,結果不成立(false)。

通俗地講,就是表示日常生活中“或者”的邏輯。比如,一件事情 a,b 均能處理,則只要 a 在場或者 b 在場即可,這就是或者的關系

邏輯非 !

邏輯非表示“否”。
!a
其中,如果 a 為 true,則結果為 false; 如果 a 為 false,則結果為 true。

注意事項

(1) 操作符是一個整體,中間不能加空格
例如 && ||
(2) 操作符與操作數(shù)之間,可以加空格
比如,! k 也可以

賦值操作符

在 Java 語言里,等號稱為賦值操作符。例如,
a = b + 100;

其中,不要把 Java 語言理解為數(shù)學。在 Java 里,這個等號的作用是“賦值”,就是把右側(cè)的值賦給左邊的變量。

  • 等號左邊必須是變量;
    - 將等號右邊表達式的值,賦給左邊的變量。

區(qū)分初始值與賦值

在定義一個變量的時候,可以指定初始值。
int a = 10;// 定義一個變量 a,初始值為 10
int b;// 如果未指定初始值,則初始值為 0

下面演示一下賦值操作。

int a = 10;// 此行的等號為初始化
int b = 22;// 此行的等號為初始化
a = b + 100;// 此行的等號表示賦值操作

賦值操作的過程

賦值操作分為 2 步運行:
① 先計算等號右側(cè)的式子的值;
② 再把右側(cè)的值賦給左側(cè)的變量。
例如
int a = 10; a = a + 99;// 重點理解這一行的賦值操作 System.out.println("a 的值為 " + a );

來分析一下, a = a + 99 這一行是分兩步來運算的:(1) 首先,計算出右側(cè)表達式 (a+99) 的值,為 109;
(2) 然后,將右側(cè)的值賦給左側(cè)的變量,即 a=109

組合賦值操作符

賦值操作符可以和其他操作符組合起來使用
a += b; a -= b; a *= b; a /= b; a %= b;
規(guī)則都是一樣的,a+=b 相當于 a = a + b。
int a = 10; a += 12; // 相當于 a = a + 12 System.out.println("現(xiàn)在 a 為: " + a); // a 的最終值為 22

自增操作符

在 Java 語言里,++ 稱為自增操作符。
int a = 10; a++; System.out.println("現(xiàn)在 a 為: " + a);
其中,a ++ 可以理解為 a = a +1 。所以,最終 a 的值為 11

前置自增與后置自增

自增操作符有 2 種寫法,寫在前面的稱為前置自增,寫在后面叫后置自增。

后置自增:

int b = 10; a = b++ ;
后置自增時,先把 b 的值代入式子運算,之后再對 b 自
增加 1。所以,最終的結果 a 為 10, b 為 11。

前置自增:

int b = 10; a = ++b ;
前置自增時,先對 b 自增加 1,然后再代入式子運算。
前置自增與后置自增分辨起來有點燒腦,但它并不是 Java 編程的重點,所以不要在這個知識點上花太多時間。

通常為了增加代碼的可讀性,可以分成 2 行書寫。
a = b; b ++; // 分成兩行來寫,以消除可能的誤解

自減操作符

int a = 0; int b = 10; a = b --; // 先代入運算,后自減。所以 a 變成 10,b 變成 9。

再次強調(diào),++和--不是學習的重點,不要過分地研究和練習。

操作符的優(yōu)先級

當一個表達式里有多種操作符時,就需要明確操作符的優(yōu)先級順序。也就是說,哪些部分先運算,哪些部分后運算。比如,
a - b * 10 / 2
這個表達式看起來很簡單。之所以會覺得簡單,因為事先知道了算術符的優(yōu)先級。畢竟在小學時代就學過了算術運算的優(yōu)先級,乘除法的優(yōu)先級是高于加減法的
但是,當把多種 Java 操作符綜合在一起時,就不那么簡單了。

比如,
a>10 && !ok
對于這樣的式子,含有關系操作符 > 和邏輯操作符 && ! 。
要進行運算,就必須明確優(yōu)先級。在這里,關系操作符比邏輯操作符的優(yōu)先級高,而邏輯非又與邏輯與的優(yōu)先級高所以,它的運算順序是這樣的:
( ( a>10 ) && ( !ok )
然而,在 Java 語言里,操作符約有幾十種,想要記住它們的
優(yōu)先級順序是不太現(xiàn)實的,也是不必要的。并不需要強記這些優(yōu)先級,只要知道幾種常用的操作符的優(yōu)先級就足夠了。當表達式較為復雜的時候,建議多加一些小括號,用小括號來明確指定運算的先后順序

類型轉(zhuǎn)換操作符

在整型與浮點型之間,允許類型轉(zhuǎn)換。
double a = 12.77; int b = (int) a; // 將 double 類型轉(zhuǎn)成 int 類型 System.out.println("b 的值:" + b);
a 是 double 型 ,
b 是 int 型,
b = a 賦值時,要求左右兩側(cè)的類型相同。所以,可以把 a 轉(zhuǎn)換成 int 型。也就是說,一個 double 類型可以轉(zhuǎn)成 int 類型。把這對小括號稱為類型轉(zhuǎn)換操作符

反過來,一個 int 類型也可以轉(zhuǎn)換成 double 類型。
int c = 10; double d = (double) c; // 將 int 類型轉(zhuǎn)成 double 類型

類型轉(zhuǎn)換時的數(shù)據(jù)損失

在 double -> int 的轉(zhuǎn)換過程中,數(shù)據(jù)可能發(fā)生損失。
double a = 12.77; int b = (int) a; // 存在數(shù)據(jù)損失
轉(zhuǎn)換后的 b 的結果為 12,即小數(shù)部分被截斷。
反過來,在 int -> double 的轉(zhuǎn)換過程中,數(shù)據(jù)不會損失。
int c = 10; double d = (double) c; // 沒有數(shù)據(jù)損失

顯式轉(zhuǎn)換與隱式轉(zhuǎn)換

在類型轉(zhuǎn)換的過程中,如果沒有風險和數(shù)據(jù)損失,就可以把類型轉(zhuǎn)換符省略
int c = 10; double d = c; // 省略 (double) 轉(zhuǎn)換符
在 d=c 的過程中,發(fā)生了隱式的類型轉(zhuǎn)換,相當于
int c = 10; double d = (double)c ; // 加不加 (double)都可以
把這種自然而然的、沒有任何風險的轉(zhuǎn)換,稱為隱式轉(zhuǎn)換。如果可以隱式轉(zhuǎn)換,就可以把轉(zhuǎn)換符()省略不寫

注意事項

(1) 小數(shù)轉(zhuǎn)整數(shù)時,小數(shù)部分被截斷。注意不是四舍五入!
double a = 12.9; int b = (int) a; // b 的值是 12,沒有四舍五入
(2) 默認其他類型是不能轉(zhuǎn)換的
例如,boolean 與 int 是不能相互轉(zhuǎn)換的。例如,
boolean k = true; int a = (int) k; // 錯!別亂寫!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374