程式裡的運算不止有加減乘除
java零基礎入門-核心語法篇(五) 運算子 型別轉換
運算子
運算子很重要,我們會在業務中經常用到運算子來幫助我們解決問題。在程式設計領域,運算子要比我們已經知道的加減乘除要多一些,包括算數運算,賦值運算,擴充套件賦值運算,自運算,比較運算,邏輯運算,三目運算(三元運算),位運算(這個知道名字就行,這裡不做講解)。
賦值運算
賦值運算子就是 等號 , 在等號左邊是變數,右邊是你要給變數的資料。
比如: int intTest = 5; int 資料型別,intTest 變數名稱,=
int intTest = 1+2; int intTest = 3*3-1;
都是可以的。在賦值的時候,會先計算右邊的結果,再複製給左邊的變數。
擴充套件賦值運算
擴充套件賦值運算擴充套件賦值只是一種偷懶的寫法而已,其實不用也完全可以。需要注意的是這裡的變數,變數是可以重複賦值的,每次重新賦值後,變數儲存的資料都會變,所以在一段程式碼中,長得一樣的變數,出現在不同的位置,他肚子裡的值可是不一樣的,這個要注意一下。
算數運算
算術運算就是最簡單的加減乘除外加一個取餘,我們來看看實際效果
1.首先我們定義了兩個整數型別的變數,然後計算加,減,乘,都是正確的結果,因為這幾個運算不會改變資料型別。
2.除法 1 :首先看不做任何操作的除法,10 / 7 結果是1,因為兩個變數都是整數型別,預設結果也是整數型別,所以是1,而不是帶有小數位的數。並且這裡是直接丟掉小數位,電腦是個傻子,別指望他會幫你四捨五入。你可以自己動手試試用 13 / 7 看看結果是多少就知道了。
除法 2 :(float)(intTest1 / intTest2) 首先計算的是 intTest1 / intTest2 這部分,因為有括號,所以先計算,這裡還是整數型別除法,結果還是1,然後做型別轉換(型別轉換下面說,這裡混個臉熟先),要做的轉換其實是這樣 (float)(1),所以結果就是將整數 1 轉換為浮點型別,結果就是 1.0
除法 3 :(float)intTest1 / intTest2 這裡與上面最大的不同就是 intTest1 / intTest2 外面沒有括號,所以優先計算型別轉換
(float)intTest1 / intTest2 => 10.0 / 7 因為是浮點型別除以整數型別,結果自動轉換為浮點型別,所以結果是1.4285715
3 取餘 取餘計算比較簡單,就是你小學學的餘數,取餘計算會用在很多地方,留點心。
自運算
自運算上圖演示了自增的兩種方法,自減一樣, intTest1 -- 表示先賦值,自己再減1,--intTest1表示先自己減1,再賦值。自運算在迴圈語句裡面應用很廣泛。沒有自乘和自除,這樣寫會報錯。
比較運算
比較運算比較運算結果都是boolean型別,一般將 true 稱為 真,false 稱為 假,在後面講解的流程控制,分支結構中會經常用到。
邏輯運算
邏輯運算一般用來判斷多個表示式是否滿足條件,比如我想找個身高160以上,170以下的女同學來聊聊人生,然後有兩個女同學,一個身高180,一個身高165,他們符不符合標準呢?
&& 官方翻譯 : 與 ,可以念 並且 。比如:找老公, 男 && 有錢 翻譯: 男的並且有錢。&&要兩個表示式都是true,結果才是true。啥意思?找老公,必須是男的吧,左邊表示式 男 true,要有錢養你吧,右邊表示式 有錢 true,結果就是 嫁 true。如果一邊不滿足,就是false 不嫁。不是男的怎麼嫁?自己都養不活怎麼嫁?(還不來好好學習?)
|| 官方翻譯:或,可以念 或者。比如 :找工作,碼農 || 金融 翻譯:碼農或者金融。||兩個表示式,有一邊滿足即可。找工作,當碼農可以,收入還行 true,搞金融也可以啊true,結果true。當碼農 true,不搞金融 false,也行啊 結果還是true。所以只要一個true,結果就是true。
!官方翻譯:非,可以念 不。比如:買東西,!貴 翻譯:不貴。這個就是把後面的結果翻過來,!貴 = 不貴,!好 = 不好
邏輯運算很容易把人繞進去,千萬不要寫過於複雜的邏輯運算,那是跟自己過不去。我們看看上面兩個等價的表示式
height4 < 160 || height4 > 170 和 !(height4 > 160 && height 4 < 170) 他們是一樣的,看不懂我們上圖
除了 && 和 || 之外還有 & 和 |,不常用,知道有這符合即可。
三目運算(三元運算)
先看看三目運算的結構
資料型別 變數名 = 表示式(結果是布林值) ? (表示式為true時,賦值) : (表示式為false時,賦值)
懂了吧,1<2 是 true ,所以intTest1 最後賦值 3
運算子到這裡就講完了。有同學肯定會問,不是還有什麼平方啊,開根號之類的運算嗎?為啥不講?其實的確還有很多種運算,但是平方開根號這種計算在jdk裡面封裝好了,他並不是作為最基礎的運算而存在,而是作為工具存在,我們隨時可以取出來用。我們下面看看它們在哪。
運算子優先順序
級別高的優先運算
不認識的不用管型別轉換
上面在做除法運算的時候提到了型別轉換,這裡就來詳細講解一下型別轉換。首先我們複習一下上一篇講的知識,每個資料型別佔用的空間。
資料轉換和空間有什麼關係?比如我們看byte,他的範圍是 -128 ~ 127 ,我把它改成 int 型別完全沒有問題,因為int型別的範圍比他大。但是如果int型別轉成byte型別會怎麼樣?int 型別佔用32位空間,而byte只佔用8位空間,電腦很傻,存不進去就亂存。
所以我們把型別轉換分為兩種,一種是小空間型別轉大空間型別,叫自動轉換,甚至無需說明,自動轉。而大空間型別往小空間型別轉換叫強制轉換,塞不進去也要塞,塞多少算多少,錯了拉到。
型別轉換賦值和方法呼叫 轉換規則:從低位型別到高位型別自動轉換;從高位型別到低位型別需要強制型別轉換:
(1)布林型和其它基本資料型別之間不能相互轉換;
(2)byte型可以轉換為short、int、、long、float和double;
(3)short可轉換為int、long、float和double;
(4)char可轉換為int、long、float和double;
(5)int可轉換為long、float和double;
(6)long可轉換為float和double;
(7)float可轉換為double;
強制型別轉換 需要在前面用括號加型別說明,比如 (int)10.2,將浮點強制轉為int。