Java基礎知識——算術操作符、自增自減、關係操作符,你真的瞭解嗎?
三人行,必有我師焉。歡迎大家加我的微信 yh18482155461,或掃描下方二維碼,關注我的微信公眾號,共同探討Java相關技術問題。
溫故知新
上一節我們講到了Java中的賦值操作符,用案例的方式講解了賦值操作符的使用方式,以及其作用於基本資料型別和引用資料型別的不同效果。請回答一下幾個問題:
- 賦值表示式的左值和右值分別需要符合什麼規則?
- 賦值操作符作用於基本資料型別和作用於引用資料型別有什麼異同?
如果發現有回答不上的問題,請回顧上節內容!如果還不懂,請直接@我!
更上一層樓
今天我們主要講解以下內容哦!!!
- 算術操作符
- 自增自減操作符
- 關係操作符
算術操作符
基本算術操作符
Java中的基本算術操作符主要包括加號(+)、減號(-)、乘號(*)、除號(/)和取模(%)運算。
運算示例
public class Operation { public static void main(String [] args) { int a = 10; int b = 5; int c = a + b; int d = a - b; int e = a / b; int f = a * b; int g = 3 % 2; System.out.println("c="+c+";d="+d+";e="+e+";f="+f+";g="+g); } } //output //c=15;d=5;e=2;f=50;g=1 //+-*/相對簡單,就不多敘述了;重點是取模運算(%),也叫做取餘運算 //即取整除之後的餘數
組合操作符
在Java中可以把操作符和賦值操作符合併為一個操作符,如 +=
、 -=
、 *=
、 /=
等;在這裡我們主要舉例基本算術操作符和賦值操作符的組合使用。 Java中所有的操作符都可以與賦值操作符搭配,只要其有實際意義就行
。
運算示例
public class Operation { public static void main(String [] args) { int a = 10; //相當於 a = a + 5 int a += 5; System.out.println(a); //相當於 a = a - 5 int a -= 5; System.out.println(a); //相當於 a = a * 5 int a *= 5; System.out.println(a); //相當於 a = a / 5 int a /= 5; System.out.println(a); } } //output //15 //5 //50 //2
加減算術操作符的特殊用法
+、-算術操作符,既可以作為一元操作符,也可以作為二元操作符(元的概念,幾元指有幾個值參與了操作!)
一元減號操作符的作用是轉變資料的符號,如 1 => -1;而一元加號操作符的作用是將較小型別的運算元提升為int型別,如把一個short數提升為int型別。
自增自減操作符
Java提供了大量的快捷運算操作符。其中,自增和自減操作符是日常中用的比較多的。 自增操作符
用符號 ++
表示, 自減操作符
用符號 --
表示。
自增自減操作符有兩種使用方式(假設我們有一個變數a):
++a --a
運算示例
public class Operation { public static void main(String [] args) { int a = 5; //相當於 a = a + 1 System.out.println(a++); //相當於 a = a + 1 System.out.println(++a); } } //output //5 //6 //可能會有同學疑惑,為什麼結果是這樣的呢? //a++,表示先生成變數的值作為結果,再進行運算 //因此返回的是沒進行運算前的值 //因此是5 //++a,表示先進行運算,再生成變數的值作為結果 //因此返回的是進行運算之後的值 //因此是6
關係操作符
關係操作符是判斷兩個值或者說兩個物件之間關係的操作符,其返回一個boolean結果。關係操作符包括 >
、 <
、 >=
、 <=
、 ==
、 !=
。 ==
和 !=
適用於所有的基本資料型別,而 其他操作符不適用於boolean型別
。
運算示例
public class Operation { public static void main(String [] args) { int a = 10; int b = 5; System.out.println("a>b:"+(a>b)); System.out.println("a<b:"+(a<b)); System.out.println("a>=b:"+(a>=b)); System.out.println("a<=b:"+(a<=b)); System.out.println("a!=b:"+(a!=b)); System.out.println("a==b:"+(a==b)); } } //output //a>b:true //a<b:false //a>=b:true //a<=b:false //a!=b:true //a==b:false
==操作符到底在比較什麼?
請看以下例子:
public class Operation { public static void main(String [] args) { Integer i1 = new Integer(10); Integer i2 = new Integer(10); Value v1 = new Value(); Value v2 = new Value(); v1.i = v2.i = 10; System.out.println("i1 == i2?" + i1 == i2); System.out.println("i1 != i2?" + i1 != i2); System.out.println("i1.equals(i2)?" + i1.equals(i2)); System.out.println("v1 == v2?" + v1 == v2); System.out.println("i1.equals(i2)?" + i1.equals(i2)); } class Value { int i; public void setI(int i) { this.i = i; } public int getI() { return this.i; } } } //output //i1 == i2?false //i1 != i2?true //i1.equals(i2)?true //v1 == v2?false //i1.equals(i2)?false
在對以上案例的答案進行解讀之前,我們需要先清楚一個知識點: ==操作符和!=操作符比較基本資料型別時比較的是值,而比較物件時比較的是物件的引用
。因此對於前兩個輸出,我們可以理解了,因為通過 new
操作符獲得的Integer物件,在記憶體中都有各自的實體地址,因此他們的引用是不同的(引用實際放的就是實體地址)。
那麼如何比較兩個物件的實際內容是否相等呢? 所有的物件都有equals方法,可用於比較物件的實際內容是否相等
。但是這個方法不適用於基本資料型別。
那麼我們就可以理解,第三個輸出,由於i1和i2的值都是10,因此他們通過equals方法比較出來是相等的。但是為什麼第四、第五個輸出又是false呢? 因為equals方法預設比較的實際還是物件的引用,除非我們重寫該方法,並重新定義其實現
。很顯然,Integer這個類中,重寫了該方法。
時時回顧
今天我們主要講解了Java中的算術運算子、自增自減操作符和關係操作符。這些操作符在我們日後的生活中經常用到,因此務必牢牢掌握!
如果覺得我寫的內容對你有幫助,可以關注我的微信公眾號,和我一起進步!