提到運算,你可能會立即想到加、減、乘、除四則運算以及「九九乘法表」。Java 語言中有很多進行資料運算的方式,比如:算術運算、比較運算、邏輯運算、賦值運算、三目運算等。每
2021-07-23 03:02:47
提到運算,你可能會立即想到加、減、乘、除四則運算以及「九九乘法表」。Java 語言中有很多進行資料運算的方式,比如:算術運算、比較運算、邏輯運算、賦值運算、三目運算等。
每一種運算方式,又都包含了很多的運算符,播妞把這些運算符形象的稱為「十八般武藝」,學習 Java 中的運算,就是學習這些運算符的使用,也就是修煉這「十八般武藝」的過程。
運算符
顧名思義,就是對資料(常量和變數)進行運算的符號。我們把資料用運算符連線起來,就構成了可以進行運算的表示式。比如 1 + 2、3 * 4 等等。看看這行程式碼:
public class Test{ public static void main(String[] args) { int number = 1 + 2; // 使用加號(+)將常量1和2連線起來,構成了一個加法表示式,並把運算結果賦值給變數number System.out.println(number); // 輸出number的值 }}上面的式子就是使用運算符加號(+)將常量 1 和 2 連線起來,構成了一個加法表示式,並把運算結果賦值給變數 number,不出意外的話,列印結果應該是:3
事實上,參與運算的資料可能會有很多,也有可能是變數、常量等混合在一起進行運算,比如(接上面程式碼):
public class Test{ public static void main(String[] args) { int number = 1 + 2; // 使用加號(+)將常量1和2連線起來,構成了一個加法表示式,並把運算結果賦值給變數number System.out.println(number); // 輸出number的值 int count = number + 10; // 變數和常量同時參與運算 System.out.println(count); // 輸出計算結果 }}列印結果:13
除此之外,運算的方式也有很多,加法、減法、取餘(取模)、比較運算等等,但它們都有一個共同的特點:每個表示式都會有一個運算結果。我們根據表示式運算結果的資料類型,將表示式的類型進行歸納分類,比如:
整型表示式:
運算結果為整數。比如:1 + 2、10 * 20、5 - 3,它們的運算結果都是整數;
浮點型表示式:
運算結果為浮點數。比如:3.14 * 2、0.618 + 0.382、3.0 / 1,它們的運算結果都是浮點數;
布爾型表示式:
運算結果為布爾類型的值。比如:2 > 1、(20-10) < 15,它們的運算結果都是布爾型:要麼true、要麼false。
練好了運算符、表示式的基本功,現在,我們可以開始學習真正的武藝了。
算術運算
先來幾個簡單的招式,好好複習我們小學時期的算術運算。Java 中的算術運算符「大概也許」有七種:
前面四個運算符還算常見:+、 -、 *、 / ,雖然乘號(*)和除號(/)跟我們以前見到的長得不一樣,但並不難理解。
百分號(%)在這裡是「取餘」、「取餘」的意思,也就是說,使用百分號(%)可以得到數字 7 除以 3 之後的餘數:1。而 ++ 和 -- 就比較陌生了,它們分別代表資料 「自增1」 和 「自減1」,這種運算是我們以前沒見過的,接下來,我手把手教你每個招式——運算符的用法。
1、加、減、乘、除
先學會舞刀弄槍——四則運算的用法,上程式碼:
public class Test{ public static void main(String[] args) { int num1 = 3; int num2 = 4; int num3 = 5; int num4 = 10; // 1.加法運算 int add = num1 + num2; // 2.減法運算 int subtract = num2 - num1; // 3.乘法運算 int multiply = num2 * num3; // 4.除法運算 int divide = num4 / num3; // 分別輸出運算結果 System.out.println(add); // 輸出加法計算結果 System.out.println(subtract); // 輸出減法計算結果 System.out.println(multiply); // 輸出乘法計算結果 System.out.println(divide); // 輸出除法計算結果 }}輸出結果:
7
1
20
2
運算結果完全沒有新意。
除法運算有個細節要注意:如果相除的兩個數進行運算,除不盡怎麼辦?猜想一下,下面這個行程式碼會得到什麼結果:
System.out.println(7 / 3); // 即 7 / 3,結果是什麼,2.333...還是2,還是1
看結果:
public class Test{ public static void main(String[] args) { System.out.println(7 / 3); }}結果居然是2!為什麼會這樣?
切記一點:除法運算符( / ),得到兩個資料相除的商,在 Java 語言中,整數除以整數結果還是整數,如果除不盡,會捨棄餘數。也就是說,7 / 3 的商是2,餘數為1,因為參與運算的被除數、除數都是整數(int類型),所以計算結果還是整數,捨棄了餘數部分,結果是2。
是不是有一種恍然大悟的感覺。這是 Java 中的運算與我們以前的認知第一個不一樣的地方。
2、取模、自增(++)和自減(--)
再教你三個進階招式(%、 ++、 --):
public class Test{ public static void main(String[] args) { int num1 = 3; int num2 = 4; int num3 = 5; int num4 = 10; int remainder = num3 % num1; // 取模/取餘運算,5對3取模,結果是? System.out.println(remainder); // 輸出取模運算結果 num2++; // num2自增1 num4--; // num4自減1 System.out.println(num2); // 輸出自增之後的運算結果 System.out.println(num4); // 輸出自減之後的運算結果 }}輸出結果:
2
5
9
百分號(%)是取模運算,也叫取餘運算,是除法運算的一種擴展,只不過除法運算得到的結果是商,而取模運算得到的結果是餘數。如果兩個數進行取模運算,結果是0,意味著什麼?沒錯,這就是整除的效果,所以,取模運算(%)可以用來判斷兩個數是否能夠整除,也就是說,被除數是除數的倍數。
加加(++)和減減(--)運算是讓變數進行自增或自減。這裡要注意,不能將這兩個運算符直接使用到常量上,比如下面的程式碼是錯誤的:
1++; // 不允許常量自增或自減
思考一下,為什麼?
那是因為常量的概念,規定了它不能夠被修改,所以,如果你想要獲得2,那麼直接使用字面值常量2就行了,完全不需要使用另一個常量進行運算。
還有個細節,上面的程式碼,也可以把 ++ 和 -- 放到變數的前面,這樣的運算結果是一樣的(放在變數前、後的程式碼不能同時存在,否則資料會進行兩次運算哦):
來,我們試試把++和--寫到前面
++num2; // num2自增1--num4; // num4自減1public class Test{ public static void main(String[] args) { int num1 = 3; int num2 = 4; int num3 = 5; int num4 = 10; int remainder = num3 % num1; // 取模/取餘運算,5對3取模,結果是? System.out.println(remainder); // 輸出取模運算結果 // num2++; // num2自增1// num4--; // num4自減1++num2; // num2自增1--num4; // num4自減1 System.out.println(num2); // 輸出自增之後的運算結果 System.out.println(num4); // 輸出自減之後的運算結果 }}輸出結果沒有變化:
5
9
當然,加加(++)和減減(--)也可以像別的運算符那樣,把結果賦值給一個新的變數,就像這樣:
public class Test{ public static void main(String[] args) { int num1 = 3; int num2 = 4; int num3 = 5; int num4 = 10; int num5 = num2++; // 猜想:num2自增1,然後賦值給新變數num5int num6 = num4--; // 猜想:num4自減1,然後賦值給新變數num6System.out.println(num5); // 輸出自增之後的運算結果System.out.println(num6); // 輸出自減之後的運算結果 }}輸出結果:
4
10
咦,怎麼還是原來的值?難道是沒有發生運算?
看來我們的猜想不正確,原來,
int num5 = num2++; // 結論:num2先賦值給新變數num5,然後才進行自增運算
int num6 = num4--; // 結論:num4先賦值給新變數num6,然後才進行自減運算
我把加加(++)和減減(--)放到變數前面試試:
public class Test{ public static void main(String[] args) { int num1 = 3; int num2 = 4; int num3 = 5; int num4 = 10;// int num5 = num2++; // 結論:num2先賦值給新變數num5,然後才進行自增運算// int num6 = num4--; // 結論:num4先賦值給新變數num6,然後才進行自減運算int num5 = ++num2; // 猜想:num2自增1,然後賦值給新變數num5int num6 = --num4; // 猜想:num4自減1,然後賦值給新變數num6 System.out.println(num5); // 輸出自增之後的運算結果 System.out.println(num6); // 輸出自減之後的運算結果 }}輸出結果:
5
9
終於變成正確答案了:
int num5 = ++num2; // 結論:num2自增1,然後賦值給新變數num5
int num6 = --num4; // 結論:num4自減1,然後賦值給新變數num6
但是,這是為什麼呢?加加(++)和減減(--)放到變數前和放到變數後為什麼結果不一樣,到底資料有沒有進行運算呢?
剖析一下這兩招:
單獨使用:放在變數前或後結果一樣
參與其它運算:在變數前,先自增(自減) ,再進行其它運算
在變數後,先以原值進行其它運算,再自增(自減)
所以,第一次把 ++ 和 -- 放在變數後,是把變數原來的值賦值給新變數,而自增(或自減)的值被拋棄了,因此列印的是原來的值;第二次把 ++ 和 -- 放在變數前,是把運算之後的值賦值給新變數。
因此列印的是計算之後的資料,這就是加加(++)和減減(--)這兩個運算符的底層原理。++ 和 -- 是一種特殊的運算,這是再一次不同於我們以往認知的一個地方。
相關文章
提到運算,你可能會立即想到加、減、乘、除四則運算以及「九九乘法表」。Java 語言中有很多進行資料運算的方式,比如:算術運算、比較運算、邏輯運算、賦值運算、三目運算等。每
2021-07-23 03:02:47
又一個全新的測試版蘋果在今年的 WWDC 上就已經透露,未來還會給 AirPods 系列釋出測試版的固件,讓開發者體驗新的功能並進行測試。而在今天,AirPods Pro 的測試版固件終於來了!
2021-07-23 03:02:41
在7月21日realme釋出了真我GT大師探索版,這款手機亮點很多,今天我們就來一起聊一下這款產品,到底值不值得入手?首先來聊一下真我GT大師探索版的影像,不知道大家注意到了沒有,realm
2021-07-23 03:02:34
【7月22日訊】相信大家都知道,華為釋出自研鴻蒙OS系統直接彌補了國產作業系統的諸多短板和不足,在越來越多國產作業系統廠商的不斷努力之下,也讓我們看到了不少國產作業系統開
2021-07-23 03:02:27
你有用過蘋果電腦嗎?教授最近發現一個怪象:許多 iPhone 使用者換了安卓手機後,很快就能適應新手機;但是蘋果電腦使用者換了 Windows 後,用了好幾天還是在吐槽用不習慣。甚至還有
2021-07-23 03:02:13
本篇圖片較多,如遇炸圖重新整理幾次即可自從AMD的FidelityFX Super Resolution. 也就是大家常說的FSR推出以來,不少玩家都非常希望可以看到AMD FSR,和NVIDIA DLSS的畫面以及幀
2021-07-23 03:01:44