首頁技術(shù)文章正文

什么是Java運(yùn)算?Java運(yùn)算好學(xué)嗎?

更新時(shí)間:2022-11-24 來源:黑馬程序員 瀏覽量:

提到運(yùn)算,你可能會(huì)立即想到加、減、乘、除四則運(yùn)算以及“九九乘法表”。Java 語言中有很多進(jìn)行數(shù)據(jù)運(yùn)算的方式,比如:算術(shù)運(yùn)算、比較運(yùn)算、邏輯運(yùn)算、賦值運(yùn)算、三目運(yùn)算等。每一種運(yùn)算方式,又都包含了很多的運(yùn)算符,小編把這些運(yùn)算符形象的稱為“十八般武藝”,學(xué)習(xí) Java 中的運(yùn)算,就是學(xué)習(xí)這些運(yùn)算符的使用,也就是修煉這“十八般武藝”的過程。



public class Test{
   public static void main(String[] args) {
       int number = 1 + 2; // 使用加號(hào)(+)將常量1和2連接起來,構(gòu)成了一個(gè)加法表達(dá)式,并把運(yùn)算結(jié)果賦值給變量number
       System.out.println(number); // 輸出number的值
  }
}

上面的式子就是使用運(yùn)算符加號(hào)(+)將常量 1 和 2 連接起來,構(gòu)成了一個(gè)加法表達(dá)式,并把運(yùn)算結(jié)果賦值給變量 number,不出意外的話,打印結(jié)果應(yīng)該是:

public class Test{
   public static void main(String[] args) {
       int number = 1 + 2; // 使用加號(hào)(+)將常量1和2連接起來,構(gòu)成了一個(gè)加法表達(dá)式,并把運(yùn)算結(jié)果賦值給變量number
       System.out.println(number); // 輸出number的值
       int count = number + 10; // 變量和常量同時(shí)參與運(yùn)算
       System.out.println(count); // 輸出計(jì)算結(jié)果
  }
}

打印結(jié)果:

13

除此之外,運(yùn)算的方式也有很多,加法、減法、取余(取模)、比較運(yùn)算等等,但它們都有一個(gè)共同的特點(diǎn):每個(gè)表達(dá)式都會(huì)有一個(gè)運(yùn)算結(jié)果。我們根據(jù)表達(dá)式運(yùn)算結(jié)果的數(shù)據(jù)類型,將表達(dá)式的類型進(jìn)行歸納分類,比如:

整型表達(dá)式:運(yùn)算結(jié)果為整數(shù)。比如: 1 + 2、10 * 20、5 - 3,它們的運(yùn)算結(jié)果都是整數(shù)
浮點(diǎn)型表達(dá)式:運(yùn)算結(jié)果為浮點(diǎn)數(shù)。比如:3.14 * 2、0.618 + 0.382、3.0 / 1,它們的運(yùn)算結(jié)果都是浮點(diǎn)數(shù)
布爾型表達(dá)式:運(yùn)算結(jié)果為布爾類型的值。比如:2 > 1、(20-10) < 15,它們的運(yùn)算結(jié)果都是布爾型:要么true、要么false。
練好了運(yùn)算符、表達(dá)式的基本功,現(xiàn)在,我們可以開始學(xué)習(xí)真正的武藝了。

算術(shù)運(yùn)算

先來幾個(gè)簡單的招式,好好復(fù)習(xí)我們小學(xué)時(shí)期的算術(shù)運(yùn)算。Java 中的算術(shù)運(yùn)算符【大概、也許】有七種:

1669213255528_2.png

前面四個(gè)運(yùn)算符還算常見:+、 -、 *、 / ,雖然乘號(hào)(*)和除號(hào)(/)跟我們以前見到的長得不一樣,但并不難理解。百分號(hào)(%)在這里是“取余”、“取余”的意思,也就是說,使用百分號(hào)(%)可以得到數(shù)字 7 除以 3 之后的余數(shù):1。而 ++ 和 -- 就比較陌生了,它們分別代表數(shù)據(jù) “自增1” 和 “自減1”,這種運(yùn)算是我們以前沒見過的,接下來,我手把手教你每個(gè)招式——運(yùn)算符的用法。

1、加、減、乘、除

四則運(yùn)算的用法,代碼如下:

public class Test{
   public static void main(String[] args) {
       int num1 = 3;
       int num2 = 4;
       int num3 = 5;
       int num4 = 10;
       // 1.加法運(yùn)算
       int add = num1 + num2;
       // 2.減法運(yùn)算
       int subtract = num2 - num1;
       // 3.乘法運(yùn)算
       int multiply = num2 * num3;
       // 4.除法運(yùn)算
       int divide = num4 / num3;
       // 分別輸出運(yùn)算結(jié)果
       System.out.println(add); // 輸出加法計(jì)算結(jié)果
       System.out.println(subtract); // 輸出減法計(jì)算結(jié)果
       System.out.println(multiply); // 輸出乘法計(jì)算結(jié)果
       System.out.println(divide); // 輸出除法計(jì)算結(jié)果
  }
}

輸出結(jié)果:

7
1
20
2

除法運(yùn)算有個(gè)細(xì)節(jié)要注意:如果相除的兩個(gè)數(shù)進(jìn)行運(yùn)算,除不盡怎么辦?猜想一下,下面這個(gè)行代碼會(huì)得到什么結(jié)果:

System.out.println(7 / 3); // 即 7 / 3,結(jié)果是什么,2.333...還是2,還是1

看結(jié)果:

public class Test{
  public static void main(String[] args) {
  System.out.println(7 / 3);
  }
}

切記一點(diǎn):除法運(yùn)算符( / ),得到兩個(gè)數(shù)據(jù)相除的商,在 Java 語言中,整數(shù)除以整數(shù)結(jié)果還是整數(shù),如果除不盡,會(huì)舍棄余數(shù)。也就是說,7 / 3 的商是2,余數(shù)為1,因?yàn)閰⑴c運(yùn)算的被除數(shù)、除數(shù)都是整數(shù)(int類型),所以計(jì)算結(jié)果還是整數(shù),舍棄了余數(shù)部分,結(jié)果是2。

是不是有一種恍然大悟的感覺。這是 Java 中的運(yùn)算與我們以前的認(rèn)知第一個(gè)不一樣的地方。

2、取模、自增(++)和自減(--)

再教你三個(gè)進(jìn)階招式(%、 ++、 --):

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; // 取模/取余運(yùn)算,5對(duì)3取模,結(jié)果是?
       System.out.println(remainder); // 輸出取模運(yùn)算結(jié)果
       num2++; // num2自增1
       num4--; // num4自減1
       System.out.println(num2); // 輸出自增之后的運(yùn)算結(jié)果
       System.out.println(num4); // 輸出自減之后的運(yùn)算結(jié)果
  }
}

輸出結(jié)果:

2
5
9

百分號(hào)(%)是取模運(yùn)算,也叫取余運(yùn)算,是除法運(yùn)算的一種擴(kuò)展,只不過除法運(yùn)算得到的結(jié)果是商,而取模運(yùn)算得到的結(jié)果是余數(shù)。如果兩個(gè)數(shù)進(jìn)行取模運(yùn)算,結(jié)果是0,意味著什么?沒錯(cuò),這就是整除的效果,所以,取模運(yùn)算(%)可以用來判斷兩個(gè)數(shù)是否能夠整除,也就是說,被除數(shù)是除數(shù)的倍數(shù)。

加加(++)和減減(--)運(yùn)算是讓變量進(jìn)行自增或自減。這里要注意,不能將這兩個(gè)運(yùn)算符直接使用到常量上,比如下面的代碼是錯(cuò)誤的:

1++; // 不允許常量自增或自減

思考一下,為什么?那是因?yàn)槌A康母拍睿?guī)定了它不能夠被修改,所以,如果你想要獲得2,那么直接使用字面值常量2就行了,完全不需要使用另一個(gè)常量進(jìn)行運(yùn)算。還有個(gè)細(xì)節(jié),上面的代碼,也可以把 ++ 和 -- 放到變量的前面,這樣的運(yùn)算結(jié)果是一樣的(放在變量前、后的代碼不能同時(shí)存在,否則數(shù)據(jù)會(huì)進(jìn)行兩次運(yùn)算哦):
來,我們?cè)囋嚢?+和--寫到前面

++num2; // num2自增1
--num4; // num4自減1
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; // 取模/取余運(yùn)算,5對(duì)3取模,結(jié)果是?
       System.out.println(remainder); // 輸出取模運(yùn)算結(jié)果
       // num2++; // num2自增1
// num4--; // num4自減1
++num2; // num2自增1
--num4; // num4自減1
       System.out.println(num2); // 輸出自增之后的運(yùn)算結(jié)果
       System.out.println(num4); // 輸出自減之后的運(yùn)算結(jié)果
  }
}

輸出結(jié)果沒有變化:

5
9

當(dāng)然,加加(++)和減減(--)也可以像別的運(yùn)算符那樣,把結(jié)果賦值給一個(gè)新的變量,就像這樣:

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,然后賦值給新變量num5
int num6 = num4--; // 猜想:num4自減1,然后賦值給新變量num6
System.out.println(num5); // 輸出自增之后的運(yùn)算結(jié)果
System.out.println(num6); // 輸出自減之后的運(yùn)算結(jié)果
  }
}

輸出結(jié)果:

4
10

怎么還是原來的值?難道是沒有發(fā)生運(yùn)算?

看來我們的猜想不正確,原來

int num5 = num2++; // 結(jié)論:num2先賦值給新變量num5,然后才進(jìn)行自增運(yùn)算
int num6 = num4--; // 結(jié)論:num4先賦值給新變量num6,然后才進(jìn)行自減運(yùn)算

我把加加(++)和減減(--)放到變量前面試試:

public class Test{
   public static void main(String[] args) {
       int num1 = 3;
       int num2 = 4;
       int num3 = 5;
       int num4 = 10;
// int num5 = num2++; // 結(jié)論:num2先賦值給新變量num5,然后才進(jìn)行自增運(yùn)算
// int num6 = num4--; // 結(jié)論:num4先賦值給新變量num6,然后才進(jìn)行自減運(yùn)算
int num5 = ++num2; // 猜想:num2自增1,然后賦值給新變量num5
int num6 = --num4; // 猜想:num4自減1,然后賦值給新變量num6
       System.out.println(num5); // 輸出自增之后的運(yùn)算結(jié)果
       System.out.println(num6); // 輸出自減之后的運(yùn)算結(jié)果
  }
}

輸出結(jié)果:

5
9

終于變成正確答案了:

int num5 = ++num2; // 結(jié)論:num2自增1,然后賦值給新變量num5
int num6 = --num4; // 結(jié)論:num4自減1,然后賦值給新變量num6

但是,這是為什么呢?加加(++)和減減(--)放到變量前和放到變量后為什么結(jié)果不一樣,到底數(shù)據(jù)有沒有進(jìn)行運(yùn)算呢?剖析一下這兩招:

單獨(dú)使用:放在變量前或后結(jié)果一樣

參與其它運(yùn)算:

 在變量前,先自增(自減) ,再進(jìn)行其它運(yùn)算

 在變量后,先以原值進(jìn)行其它運(yùn)算,再自增(自減)

所以,第一次把 ++ 和 -- 放在變量后,是把變量原來的值賦值給新變量,而自增(或自減)的值被拋棄了,因此打印的是原來的值;第二次把 ++ 和 -- 放在變量前,是把運(yùn)算之后的值賦值給新變量,因此打印的是計(jì)算之后的數(shù)據(jù),這就是加加(++)和減減(--)這兩個(gè)運(yùn)算符的底層原理。 ++ 和 -- 是一種特殊的運(yùn)算,這是再一次不同于我們以往認(rèn)知的一個(gè)地方。


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!