詳解Java表達式與運算符

2020-11-29 米粒教育

課程導言

【變量的賦值與計算都離不開表達式,表達式的運算依賴於變量、常量和運算符。本節課討論Java的表達式的構成、常量的定義、運算符的分類及應用。通過本課的學習你將掌握運用表達式和運算符完成變量賦值、條件判斷、數學運算、邏輯運算等功能操作】

在講述課程內容之前,先看一個求圓面積的問題。求圓面積的公式為;

其中S為圓面積,π為圓周率,r為半徑。

假設用程序來計算圓的面積,S、π、r均為變量,省略的乘號為運算符,r的2次方可以描述為r*r。則上面的公式即為求圓面積的表達式。

結合上面的案例,本節課程分為三個小節,第一小節探討不能修改的變量—常量;第二小節探討表達式的組成結構及運用;第三小節探討Java的基本運算符,包括賦值運算符、算術運算符、關係運算符和邏輯運算符。

第一小節 不能修改的變量——常量

在求圓面積的表達式中,π為圓周率,它是一個不變的量,在程序運行過程中不能被修改。常量同變量一樣,也佔用存儲單元的空間。常量的不可修改性提高了程序的穩定性,同時也提高了程序代碼的可維護性。例如,可以把π定義為常量,當程序需要π參與運算時,直接調用定義的常量π即可。

在java語言中,定義常量的語法如下:

final 數據類型 常量名稱 = 值;

其中,final是Java關鍵字,數據類型可以是Java語言支持的任何數據類型。

例如,下面的語句把圓周率定義為常量:

final double Pl = 3.14;

Java關鍵字是Java語言保留的一類標識符,它們用來標識一種數據類型或者程序的結構,Java關鍵字不能用於變量名、方法名、類名等命名。

第二小節 Java表達式

求圓面積的公式就是一個表達式,其中S、π、r為變量或常量,省略的乘號為運算符,r的2次方可以描述為r*r。求圓面積的表達式為:

S =π* r *r;

表達式是由變量、常量和運算符的組合,它執行計算並返回計算結果。在表達式中運算符作用的變量或常量稱為操作數。在求圓面積的表達式中,乘號(*)為運算符,π和r為操作數。

在一些複雜的運算中,簡單的表達式可以組合為複雜的表達式,其操作數本身可能就是一個表達式。例如:

(num1+num2)*(x+y)

上面的表達式中,運算符乘號(*)兩邊的操作數(num1+num2)和(x+y)本身就是一個表達式。表達式的計算結果一般為數值,如果表達式是一個關係表達式或邏輯表達式,表達式會返回一個布爾值,即真或假。

根據運算符的不同,可以把表達式分為賦值表達式、算術表達式、關係表達式和邏輯表達式。賦值表達式用於把等號右邊的操作數賦值給等號左邊的變量;算術表達式用於數值運算;關係表達式用於條件判斷;邏輯表達式用於邏輯操作。

第三小節 Java運算符

運算符用於連接表達式的操作數,並對操作數執行運算。例如,表達式num1+num2,其操作數是num1和num2,運算符是」+」。在java語言中,運算符可分為5種類型:算術運算符、賦值運算符、關係運算符、邏輯運算符、位運算符。

根據操作數的不同,運算符又分為單目運算符、雙目運算符和三目運算符。單目運算符只有一個操作數,雙目運算符有兩個操作數,三目運算符則有三個操作數。位運算符涉及到二進位位的運算,在java 程序中運用不是很多,因此下面主要介紹算術運算符、賦值運算符、關係運算符和邏輯運算符。

(1)算術運算符

算術運算符用在算術表達式中,其作用和數學中的運算符相同,下表列出了Java語言支持的算術運算符。

算術運算符一般用於數值運算,可對操作數進行加減乘除、取餘、自增和自減操作。

加減乘除、取餘運算符比較容易理解。下面重點說說自增和自減運算符。

自增自減是單目運算符,只需要一個操作數參加運算。例如:a++、++a、a--、--a等。其中,a是操作數,++是自增運算符,--是自減運算符,自增和自減運算符即可以放在變量的前面,也可以放在變量的後面,例如++a、 a++。

自增(++):將變量的值加1,分前綴式(如++a)和後綴式(如a++)。前綴式是先加1再使用;後綴式是先使用再加1。

自減(--):將變量的值減1,分前綴式(如--a)和後綴式(如a--)。前綴式是先減1再使用;後綴式是先使用再減1。

(2)賦值運算符

賦值運算符是雙目運算符,用在賦值表達式中。它的作用是將運算符右邊操作數的值賦給運算符左邊的變量。下表列出了Java語言支持的賦值運算符。

賦值運算符分為兩類,一類是簡單賦值,一類是複合賦值。簡單賦值是直接把運算符右邊操作數的值賦給運算符左邊的變量,運算符有「=」;複合賦值運算符複合賦值是先執行運算符指定的運算,然後再將運算結果賦值給運算符左邊的變量,複合賦值運算符有「+=、-=、*=、/=、%=」。

簡單賦值運算符非常容易明白和理解。下面重點說說複合賦值運算符「+=」操作,其它複合賦值運算符操作原理同「+=」運算符操作原理相同,這裡就不再一一講述了。

複合賦值運算符「+=」操作執行過程如下:

1) 將運算符右側的操作數,與運算符左側的操作數(變量值)執行相加操作;

2) 相加的結果賦值給運算符左側的變量。

例如下面語句:

int num = 10;

num+= 20;

聲明的變量num初始值為10,然後執行num+= 20賦值操作,其操作過程是變量num先與數值20相加,相加的結果是30,然後再將30賦值給變量num,此時變量num的值為30。

(3)關係運算符

關係運算符也是雙目運算符,用於關係表達式。關係運算符對兩個操作數進行比較,並返回比較結果,比較結果的值為一個布爾值(true或false)。下表列出了Java語言支持的關係運算符,表中例子假設A和B不相等,並且其A小於B。

關係運算符用於比較兩個操作數的大小,兩個操作數共有六種比較方式。

第一種比較方式是判斷兩個操作數是否相等,用運算符「==」進行運算,如果兩個操作數相等,比較結果返回true,否則返回false。

第二種比較方式是判斷兩個操作數是否不相等,用運算符「!=」進行運算,如果兩個操作數不相等,比較結果返回true,否則返回false。

第三種比較方式是判斷運算符左邊的操作數是否大於運算符右邊的操作數,用運算符「〉」進行運算,如果左邊的操作數比右邊的操作數大,比較結果返回true,否則返回false。

第四種比較方式是判斷運算符左邊的操作數是否小於運算符右邊的操作數,用運算符「<」進行運算,如果左邊的操作數比右邊的操作數小,比較結果返回true,否則返回false。

第五和第六種比較方式是判斷運算符左邊的操作數是否大於等於或小於等於右邊的操作數,用運算符「〉=和<=」進行運算,如果比較結果滿足要求,則返回true,否則返回false。

(4)邏輯運算符

邏輯運算符連接兩個關係表達式或布爾變量,用於解決多個關係表達式的組合判斷問題,返回的運算結果為布爾值。例如,在數學中,表示一個數值的範圍時,經常用不等式來表述,假設一個數值取值範圍為0到100,設該數值為x,不等式0<x<100給出了x的取值範圍。在java程序語言中,這個不等式只能分解為x<0和x>100兩個關係表達式,然後用邏輯運算符進行連接。下表列出了Java語言支持的邏輯運算符,表中假設布爾變量A為真,變量B為假。

邏輯運算符「&&」是雙目運算符,用於判斷兩個關係表達式或布爾變量是否都為真,只有兩個表達式的返回結果都為真時,運算結果為真,否則運算結果為假。

邏輯運算符「||」是雙目運算符,用於判斷兩個關係表達式或布爾變量是否有一個為真,如果有一個為真,返回結果為true,否則返回false。

邏輯運算符「!」是單目運算符,用於取反關係表達式返回的值。例如:對於關係表達式a>b,如果a> b為真,取反後為false,如果a> b為假,取反後為true。

Java運算符的優先級

和數學中的運算符一樣,Java運算符也存在優先級關係。在Java表達式中,優先級高的運算符先參與運算,優先級低的運算符後參與運算。下表給出了運算符的優先級,表中優先級欄,數字越小優先級越高,每個運算符用中文頓號分割。

表中結合性指運算符結合的順序,通常都是從左到右。從右到左的運算符最典型的就是數值前面的正負號,例如3+-4,則意義為3加-4,符號首先和運算符右側的內容結合。

■ 課程小結

1、常量是相對於變量來說的,變量在程序運行過程中,其值可以被修改,而常量是不允許被修改的。常量多用於固定不變的值,如圓周率、數值、光速等。同變量一樣,常量也可以用標識符命名,並佔用存儲單元空間。在表達式中,數值可以直接參與運算,參與運算的數值也稱為字面常量。

2、表達式同數學中的算式相同,是由變量、常量和運算符組合而成的。最簡單的表達式僅由一個運算符和一個操作數構成,較複雜的表達式則由多個運算符以及多個操作數構成。表達式必須返回計算結果,計算結果或為值或為布爾值。

3、運算符對參與的操作數進行運算,根據參與運算的操作數的個數可把運算符分為單目運算符、雙目運算符和三目運算符。當一個表達式包含多個運算符時,就需要考慮運算符的優先級,優先級高的運算符先參與運算,優先級低的運算符後參與運算。在實際的開發中,不需要特別去記憶運算符的優先級別,也不要刻意的使用運算符的優先級別,對於不清楚優先級的地方使用小括號輔助進行優先級管理。

■ 思考與練習

1、常量和變量有什麼不同?

2、表達式中的數值是常量嗎?

3、算術表達式返回的計算結果是數值還是布爾值?

4、a>b屬於什麼類型的表達式?其返回結果是數值還是布爾值?

5、假設變量a的值為5,執行a+=10操作後,變量a的值是多少?

6、請給出表達式a+=b*2的執行順序。

相關焦點

  • 跟我學java編程—Java邏輯運算符
    邏輯與運算符「&&」,用於判斷運算符兩邊的條件表達式或布爾變量是否同為真,如果同為真,返回結果為true,否則返回false。第四條語句邏輯與運算符「&&」連接了2個條件表達式,分別是c > a和c < b,如果這兩個表達式計算結果都為真,則bJudge為真,否則bJudge為false。此時bJudge的值為true。該運算符還有一個特點,當左側的條件表達式或布爾變量為假時,則直接返回結果false,不再執行運算符右側的表達式或布爾變量。
  • 運算符和表達式(1)
    typedef的語法是typedef 已有的數據類型 新的數據類型名 運算符就是完成某種特定運算的符號。運算符按其表達式中與運算符的關係可分為單目運算符,雙目運算符和三目運算符。單目就是指需要有一個運算對象,雙目就要求有兩個運算對象,三目則要三個運算對象。表達式則是由運算及運算對象所組成的具有特定含義的式子。C是一種表達式語言,表達式後面加";"號就構成了一個表達式語句。
  • C語言中的運算符和表達式
    前綴形式指變量的值加1作為表達式的值,同時變量的值加1;後綴形式指將變量的值作為表達式的值,然後變量值加1。符號運算符、自增和自減運算符為一元運算符。三、關係運算符和關係表達式程序設計中需要經常對運算對象之間的大小進行比較,如:大小、相等等關係,這樣的運算符稱為關係運算符,用關係運算符將數值或表達式連接起來的式子就是關係表達式,滿足關係表達式運算符關係的結果稱為「真」,否則為假。
  • Java8 lambda表達式語法
    本文是該系列的第一篇,主要介紹Java8對屌絲碼農最有吸引力的一個特性—lambda表達式。java8的安裝工欲善其器必先利其器,首先安裝JDK8。過程省略,大家應該都可以自己搞定。但是有一點這裡強調一下(Windows系統):目前我們工作的版本一般是java 6或者java 7,所以很多人安裝java8基本都是學習為主。這樣就在自己的機器上會存在多版本的JDK。
  • 單片機c語言教程:C51運算符和表達式
    typedef 的語法是typedef 已有的數據類型 新的數據類型名 運算符就是完成某種特定運算的符號。運算符按其表達式中與運算符的關係可分為單目運算符,雙目運算符和三目運算符。單目就是指需要有一個運算對象,雙目就要求有兩個運 算對象,三目則要三個運算對象。
  • 《第3章 Python 運算符與表達式》3.1.3 比較(關係)運算符!
    《高中信息技術 Python編程》 教學案 《第3章 Python 運算符與表達式》3.1.3 比較(關係)運算符!瀏覽器版本過低,暫不支持視頻播放3.1.3、比較(關係)運算符用於對變量或表達式的結果進行大小,真假的比較,返回結果True 、False,通常用在條件語句中作為判斷的依據。
  • Java8 lambda表達式
    匿名內部類是為了讓java程式設計師傳遞行為和傳遞數據一樣容易,不幸的是,他們並不容易,為了調用處理邏輯的代碼仍然有四行模板代碼,重複的模板代碼並不是唯一的問題,這種代碼也難以閱讀,我們並不想傳遞一個對象,而僅僅只需要傳遞某種行為,在java8中我們可以寫得更簡潔不同於傳遞一個實現某個接口的對象,我們傳遞了一段沒有命名函數的代碼
  • 給JAVA程式設計師的正則表達式一課
    正則基礎正則表達式(Regex,簡稱RE)是一種根據字符串集中的每個字符串的共同特徵來描述字符串集的方法。可用於搜索,編輯或處理文本和數據。簡單來說,正則表達式是幫助我們根據特定格式驗證或匹配字符串的方式。可以類比資料庫的SQL語言,sql是搜索數據,RE是搜索字符串。正則表達式和SQL語言是開發界的兩個偉大發明。
  • 《第3章 Python 運算符與表達式》3.1.1 算術運算符!
    《高中信息技術 Python編程》 教學案 《第3章 Python 運算符與表達式》3.1.1 算術運算符!3.1.1、算術運算符: 常規: + - * / 編程實例:原始碼:python = 95 # 定義變量,存儲Python的分數english = 92 # 定義變量,存儲English的分數c = 89
  • 單片機c語言教程:運算符和表達式(關係運算符)
    關係運算符,同樣我們也並不陌生。單片機C語言中有六種關係運算符,這些東西同樣是在我們小時候學算術時就已經學習過了的:本文引用地址:http://www.eepw.com.cn/article/170887.htm> 大於< 小於>= 大於等於<= 小於等於== 等於
  • Java中Lambda表達式的5種不同語法
    主體,由單個表達式或語句塊組成。在這種情況下,它是一個單一表達式-Integer.compare(m.length(), n.length())Output:[a, is, java, site, creek, program]2.可以推斷參數類型
  • Java運算符之位運算符
    位運算符 接下來通過一張表來展示Java中的位運算符及其用法,如表1所示。 表1 位運算符
  • JavaScript運算符與流程控制
    1 - 運算符(操作符)1.1 運算符的分類**運算符**(operator)也被稱為操作符,是於實現賦值、較和執算數運算等功能的符號。JavaScript中常的運算符有:- 算數運算符 - 遞增和遞減運算符 - 較運算符 - 邏輯運算符 - 賦值運算符1.2 算數運算符- 算術運算符概述概念:算術運算使的符號,於執兩個變量或值的算術運算。- 浮點數的精度問題浮點數值的Y精度是 17 位數,但在進算術計算時其精確度遠遠不如整數。
  • java中的字節進位計算和(&)位運算符
    但是在java中我們大部分都是用int、double、float、String等我怎麼知道int a = 1;二進位等於多少?這個時候就要計算啦。1/2 在我們看來等於0.5,然而在計算機的二進位看來就是1/2餘1,那麼為啥會餘1呢?
  • 跟我學java編程—認識java語言的字符類型
    例如:計算數值表達式時,需要存儲運算符,這時需要一種可以存儲單個字符數據的數據類型。Java語言提供了一種char數據類型,可以滿足存儲單個字符的需要。Java語言中,char佔2個字節的存儲空間,即可以存儲英文字符,也可以存儲單個漢字,一個漢字編碼也佔2個字節的存儲空間。
  • JavaScript中逗號運算符,鮮為人知的秘密
    全文共2144字,預計學習時長7分鐘逗點算符可與一組表達式運算符相配合,產生顯著作用,但是其使用方式的演變卻使人混淆不清。之所以出現這種情況,一部分原因在於逗號在JavaScript裡面有很多其他的含義。所以為了使人瞭然於心,參與逗號以下兩種表達式時,逗號就是單純的逗點算符:左手側表達和右手側表達式。
  • matlab關係運算符
    算數運算符 + 矩陣加 - 減 * 乘 .* 數組乘 ^ 矩陣乘方.^ 數組乘方 \ 矩陣左除 / 矩陣右除 .\ 數組左除 ./ 數組右除 kron 克羅內克張量積 關係運算符 邏輯與 | 邏輯或 ~ 邏輯非 xor 邏輯異或
  • Java基礎學習:java中的基本數據類型
    類型提升:表達式運算中有不同的數據類型,類型會自動向範圍大的提升。 +=運算符是java語言規定的,編譯器會對它進行識別處理,因此可以正確編譯。
  • Java基礎-instanceof用法揭秘
    Otherwise the result is false.註:在運行期,如果關係表達式不為空,並且類型轉換時不會拋出ClassCastException異常時,instanceof表達式返回結果為真,否則結果為假牽線之亂點鴛鴦譜如果沒有任何關係的兩個類使用 instanceof 會如何?
  • MySQL涉及二進位的運算符:位運算符
    截止目前我們已經學習了MySQL的三種運算符:算術運算符、比較運算符、邏輯運算符。三者有一個共同點都是針對字符型、表達式和十進位的數字。那有沒有一種專門為二進位數字提供的運算符呢?這就是本問題的主題:位運算符。