Java零基礎(chǔ)快速入門(mén)|運(yùn)算符

本文章主要內(nèi)容:
運(yùn)算符概述
算術(shù)運(yùn)算符
關(guān)系運(yùn)算符
邏輯運(yùn)算符
賦值運(yùn)算符
條件運(yùn)算符
字符串連接運(yùn)算符
難點(diǎn)疑惑
學(xué)習(xí)目標(biāo)
掌握常見(jiàn)的Java 運(yùn)算符的使用,包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符、條件運(yùn)算符、字符串連接運(yùn)算符。
知識(shí)框架

運(yùn)算符概述
運(yùn)算符是指對(duì)操作數(shù)的運(yùn)算方式。組成表達(dá)式的Java??操作符有很多種(什么是操作數(shù)和操作符,例如 1+2,其中 1?和2?都是操作數(shù),+是操作符,操作符和操作數(shù)聯(lián)合起來(lái)構(gòu)成表達(dá)式)。
運(yùn)算符按照其要求的操作數(shù)數(shù)目來(lái)分,可以有單目運(yùn)算符(1 個(gè)操作數(shù))、雙目運(yùn)算符(2??個(gè)操作數(shù))和三目運(yùn)算符(3?個(gè)操作數(shù))。
運(yùn)算符按其功能來(lái)分,有算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、條件運(yùn)算符、字符串連接運(yùn)算符和其他運(yùn)算符。
常見(jiàn)的 運(yùn)算符如下所示:

每個(gè)編程語(yǔ)言當(dāng)中都有運(yùn)算符,基本上都是通用的,這么多的運(yùn)算符,它們同時(shí)出現(xiàn)的時(shí)候有優(yōu)先級(jí)嗎?答案是有的。那么如果不確定它們的優(yōu)先級(jí)怎么辦,其實(shí)很簡(jiǎn)單,直接加小括號(hào)就可以了,添加有小括號(hào)優(yōu)先級(jí)一定是高的,所以?xún)?yōu)先級(jí)不需要死記硬背,不確定就加小括號(hào),例如:1?+ 2?*?3,想確保先求和,你就需要這樣寫(xiě):(1+2)*3。
?
運(yùn)算符詳解
算術(shù)運(yùn)算符
算術(shù)運(yùn)算符包括:+(兩個(gè)數(shù)字求和)、-(兩個(gè)數(shù)字相減)、*(兩個(gè)數(shù)字乘積)、/(兩個(gè)數(shù)字相除)、%(兩個(gè)數(shù)字取?;蛘咔笥啵?、++(單目運(yùn)算符,對(duì)數(shù)字自加 1)、--(單目運(yùn)算符,對(duì)數(shù)字自減 1)。
對(duì)于初學(xué)者來(lái)說(shuō),可能%、++、--比較生疏一些,我們重點(diǎn)來(lái)學(xué)習(xí)一下,請(qǐng)看以下代碼(注意代碼中的注釋信息):



運(yùn)行結(jié)果如下圖所示:

通過(guò)以上代碼的學(xué)習(xí),我們得知
兩個(gè) int???類(lèi)型數(shù)據(jù)進(jìn)行數(shù)學(xué)運(yùn)算之后的結(jié)果一定是 int??類(lèi)型;
++或--可以出現(xiàn)在變量前也可以是變量后;
++無(wú)論出現(xiàn)在變量前還是變量后,只要執(zhí)行了++,那么變量必然會(huì)自加1;
++出現(xiàn)在變量后會(huì)先進(jìn)行賦值運(yùn)算, 再自加1;
++出現(xiàn)在變量前會(huì)先自加1,再進(jìn)行賦值運(yùn)算。
那么,大家思考一下以下代碼的執(zhí)行結(jié)果是什么?

關(guān)系運(yùn)算符
關(guān)系運(yùn)算符主要是完成數(shù)據(jù)和數(shù)據(jù)之間的比較,比如:5>3,結(jié)果是 true(真),5>10, 結(jié)果是 false(假),那么關(guān)系運(yùn)算符都有哪些呢?>、>=、<、<=、==、!=。
關(guān)系運(yùn)算符是比較簡(jiǎn)單容易理解的,我們來(lái)看一段代碼(注意代碼中的注釋?zhuān)?/span>

通過(guò)以上代碼可以看出,任何一個(gè)關(guān)系運(yùn)算符的運(yùn)算結(jié)果都是布爾類(lèi)型,最后的結(jié)果不是true?就是false,沒(méi)有其他值,并且我們也看到 a 變量和b 變量在比較的時(shí)候是拿著變量當(dāng)中保存的值進(jìn)行比較。也就是說(shuō) a?== b 實(shí)際上是拿著a 變量中保存的 10 和b 變量中保存的10 進(jìn)行比較,看它們是否相等。
?
邏輯運(yùn)算符
邏輯運(yùn)算符主要包括邏輯與(&),邏輯或(|),邏輯異或(^),短路與(&&),短路 或(||)。所有邏輯運(yùn)算符的特點(diǎn)是操作數(shù)都是布爾類(lèi)型,并且最終的運(yùn)算結(jié)果也是布爾類(lèi)型。邏輯運(yùn)算符的基本運(yùn)算規(guī)則如下表所示:

接下來(lái)我們來(lái)研究一段代碼,重點(diǎn)看看短路是如何發(fā)生的(注意看注釋信息):


通過(guò)以上的測(cè)試,可以得出短路與(&&)在左邊的表達(dá)式結(jié)果為 false?的時(shí)候,右邊的表達(dá)式則不再執(zhí)行,這種現(xiàn)象被稱(chēng)為短路現(xiàn)象,這種機(jī)制也顯得短路與比較智能一些,效率更高一些,所以在實(shí)際開(kāi)發(fā)中短路與(&&)的使用率要比邏輯與高一些。但這并不是絕對(duì)的,有的時(shí)候也可能會(huì)選擇使用邏輯與(&),這取決于你是否期望右邊的表達(dá)式一定執(zhí)行。
大家思考一個(gè)問(wèn)題,短路或(||)在什么情況下會(huì)發(fā)生短路現(xiàn)象呢?
?
賦值運(yùn)算符
賦值運(yùn)算符目前也是只需要掌握=、+=、-=、*=、/=、%=,其它和二進(jìn)制相關(guān)的內(nèi)容也是到后面遇到的時(shí)候再詳細(xì)學(xué)習(xí)。
賦值類(lèi)的運(yùn)算符包括基本賦值運(yùn)算符(=)和擴(kuò)展的賦值運(yùn)算符(+=、-=、*=、/=、%=)。
我們來(lái)看一段代碼:

x?+= 1 和x?= x?+ 1 真的是完全相同嗎?我們來(lái)看下面的代碼:


根據(jù)以上代碼測(cè)試得出,對(duì)于擴(kuò)展類(lèi)的賦值運(yùn)算符在運(yùn)算的過(guò)程中不會(huì)改變運(yùn)算的結(jié)果類(lèi)型,也就是說(shuō)byte b?= 100; b?+= 1000;b 變量最初是byte 類(lèi)型,最后的運(yùn)算結(jié)果還是一個(gè)byte 類(lèi)型。這是一條固定的語(yǔ)法規(guī)則,大家記住就行了,以后在使用擴(kuò)展類(lèi)賦值運(yùn)算符的時(shí)候要謹(jǐn)慎,不小心就會(huì)精度損失的。
?
條件運(yùn)算符
條件運(yùn)算符屬于三目運(yùn)算符,它的語(yǔ)法結(jié)構(gòu)是:布爾表達(dá)式;表達(dá)式1;表達(dá)式2。
它的運(yùn)行 原理是這樣的,先判斷布爾表達(dá)式的結(jié)果是true 還是false,如果是 true,則選擇表達(dá)式1 的結(jié)果作為整個(gè)表達(dá)式的結(jié)果,反之則選擇表達(dá)式 2 的結(jié)果作為整個(gè)表達(dá)式的結(jié)果。
來(lái)看一段代碼:

實(shí)際上條件運(yùn)算符和后期要學(xué)習(xí)的控制語(yǔ)句if 可以達(dá)到同等效果。在實(shí)際開(kāi)發(fā)中靈活運(yùn)用條件運(yùn)算符會(huì)讓你的代碼看起來(lái)更加簡(jiǎn)潔清涼,達(dá)到意想不到的效果。
?
字符串連接運(yùn)算符
在java?語(yǔ)言中所有的字符串都使用半角雙引號(hào)括起來(lái)的,字符串屬于引用數(shù)據(jù)類(lèi)型,不屬于基本數(shù)據(jù)類(lèi)型的范疇,怎么定義一個(gè)字符串的變量呢?
例如:String?name?= “jack”;,這就類(lèi)似于int?i?= 10;是一樣的,int?是一種整數(shù)類(lèi)型,i?是變量,10?是整數(shù)型字面量。
那么String則是一種字符串類(lèi)型,name?是變量,”jack”是字符串型字面量。在Java編程中對(duì)字符串的操作是非常頻繁的,例如字符串的連接操作,此時(shí)就需要使用“+”字符串連接運(yùn)算符。
實(shí)際上“+”運(yùn)算符在Java語(yǔ)言中有兩個(gè)作用:
對(duì)數(shù)字進(jìn)行求和運(yùn)算
字符串連接運(yùn)算
那么它在什么時(shí)候是進(jìn)行求和,什么時(shí)候又進(jìn)行字符串連接呢?
大家可以這樣進(jìn)行區(qū)分,當(dāng)“+”運(yùn)算的時(shí)候,兩邊的操作數(shù)都是數(shù)字的話(huà),一定會(huì)進(jìn)行求和運(yùn)算,只要其中有一個(gè)操作數(shù)是字符串類(lèi)型,那么一定會(huì)進(jìn)行字符串拼接運(yùn)算,字符串拼接之后的結(jié)果還是字符串類(lèi)型。
需要注意的是,當(dāng)一個(gè)表達(dá)式當(dāng)中有多個(gè)“+”,并且在沒(méi)有小括號(hào)的前提下,遵循自左向右的順序依次執(zhí)行。我們來(lái)看一段程序:


對(duì)于程序System.out.println(a + " + " + b + " = " + a + b);的分析見(jiàn)下圖:

對(duì)于程序System.out.println(a + " + " + b + " = " + (a + b));的分析見(jiàn)下圖:

?總之,使用“+”進(jìn)行字符串拼接在開(kāi)發(fā)中使用太頻繁了,大家一定要將其掌握,尤其是怎么將一個(gè)變量放到字符串當(dāng)中,你還記得以上程序的口訣嗎?
除了以上所講的運(yùn)算符之外,實(shí)際上還有其它運(yùn)算符,例如位運(yùn)算符主要操作二進(jìn)制位的, 還有運(yùn)算符 instanceof、new??等。這里就不再贅述了,當(dāng)前使用較少,后期使用到的時(shí)候我們?cè)倏础?/span>
?
難點(diǎn)解惑
本章節(jié)的難點(diǎn)主要還是++運(yùn)算符的使用,例如以下代碼:

我們對(duì)以上程序進(jìn)行分析,k 變量等于10,輸出 k++,我們可以將 System.out.println(k++) 這行代碼進(jìn)行拆解,可以拆解為兩行代碼:int?temp?= k++; System.out.println(temp);,也就是說(shuō)實(shí)際上輸出k++就是輸出temp,根據(jù)之前所學(xué)規(guī)則,temp 等于10,所以 System.out.println(k++) 會(huì)輸出 10。不過(guò)當(dāng)這行代碼執(zhí)行結(jié)束之后k 就不再是 10 了,變成了 11。
我們繼續(xù)再向下分析:System.out.println(++k)。這行代碼同樣也可以拆分為兩行代碼:int temp2?= ++k; System.out.println(temp2);。其中 k 已經(jīng)等于11 了,根據(jù)以上所學(xué)規(guī)則 temp2 的值是 12,所以最終輸出 12。
我們對(duì)以上的程序進(jìn)行編譯并運(yùn)行,來(lái)看一下我們分析是否正確,請(qǐng)看下圖:

?通過(guò)以上程序的運(yùn)行我們可以看出以上的分析是沒(méi)有問(wèn)題的,所以對(duì)于初學(xué)者來(lái)說(shuō),這塊內(nèi)容確實(shí)是一個(gè)不太好理解的地方。
小結(jié)
本章節(jié)內(nèi)容需要大家掌握開(kāi)發(fā)中常用運(yùn)算符的使用,包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符、條件運(yùn)算符、字符串連接運(yùn)算符。實(shí)際上除了以上所講運(yùn)算符之外,還有其它運(yùn)算符,比如位運(yùn)算符、instanceof、new?等運(yùn)算符,在當(dāng)下使用較少,后期用到的時(shí)候再進(jìn)行學(xué)習(xí)。
本章節(jié)內(nèi)容具有通用性,不僅僅是在Java?中可以使用,在其他的編程語(yǔ)言中也可以使用。運(yùn)算符在實(shí)際的開(kāi)發(fā)中使用頻率很高,因?yàn)檐浖嬖诘哪康木褪菫榱私鉀Q數(shù)據(jù)的處理。在這里?想和大家說(shuō)的是,學(xué)好每一個(gè)運(yùn)算符的用法,為后面的學(xué)習(xí)打下扎實(shí)的基礎(chǔ)。
最后附Java零基礎(chǔ)視頻教程給大家,配合學(xué)習(xí)效果更佳?。?/strong>

