一篇文章讓你弄懂Java運算符
1. 運算符是什么?
1.1 定義:
- 對常量和變量進行運算操作的符號
- 程序?qū)?shù)據(jù)進行運算時要用運算符
1.2 常見運算符的概述
1.3 表達式
1.3.1 定義
用運算符把常量或變量連接起來的式子
1.3.2 表達式的類型
表達式的類型為表達式運算結(jié)果的數(shù)據(jù)類型
2. 算數(shù)運算符
2.1 分類:
2.2 基本四則運算符:加減乘除模(+ - * / %)
注意事項:
/ :除法運算符,得到兩個數(shù)據(jù)相除的商。
特點:Java中整數(shù)除以整數(shù)結(jié)果還是整數(shù)。
%:取模(取余)運算,得到兩個數(shù)據(jù)相除的余數(shù)。
特點:可以用來判斷兩個數(shù)是否能夠整除。
應用:
public class ArithmeticOperators { public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a/b); System.out.println(a%b); } }
運行結(jié)果如下:
在Java中,小數(shù)也可以進行取模操作
public class ArithmeticOperators { public static void main(String[] args) { System.out.println(10%3); System.out.println(12.5%2); System.out.println(12.5%2.0); } }
易錯點1:除數(shù)不能為0
public class ArithmeticOperators { public static void main(String[] args) { int a = 10; int b = 0; System.out.println(a/b); } }
會報錯! Java里面,把程序在編譯/運行的過程當中 產(chǎn)?的不正常的?為 叫做異常,圖片里面的就是算術(shù)異常
易錯點2:在java中,負數(shù)也是可以參與取模運算的
public class ArithmeticOperators { public static void main(String[] args) { System.out.println(10%3);//1 System.out.println(10%-3);//1 System.out.println(-10%3);//-1 System.out.println(-10%-3);//-1 } }
具體計算步驟(小學計算也很容易出錯熬):
2.3 增量運算符(+= -= *= %=…)
該種類型運算符操作完成后,會將操縱的結(jié)果賦值給左操作數(shù)。
public class IncOpr { public static void main(String[] args) { int a = 1; a += 2; System.out.println(a); a -= 1; System.out.println(a); a *= 3; System.out.println(a); a /= 3; System.out.println(a); a %= 3; System.out.println(a); } }
增量運算符會自動幫我們進行數(shù)據(jù)轉(zhuǎn)換
public class IncOpr { public static void main(String[] args) { int a = 99; short s = 0; //s = s + a;//err:報錯,short+int->int+int=>int,用short裝不下,需要強轉(zhuǎn) //正確寫法1: //s = (short)(s + a); //正確寫法2: s += a;//+=會自動幫我們進行類型轉(zhuǎn)換 System.out.println(a);//99 } }
2.4 自增/自減運算符(++,–)
++:自增1
– :自減1
- 單獨使用:放在變量前或后結(jié)果一樣
- 參與運算:
- 在變量前,先自增(自減) ,再進行其它運算
- 在變量后,先以原值進行其它運算,再自增(自減)
舉個栗子:
public class IncrementdecrementOpr { public static void main(String[] args) { int a = 10; int b = ++a;//a=a+1;b=a;->b=11 a=11 int c = a++;//b=a;a=a+1;->b=10 a=11; System.out.println(b); } }
3. 關(guān)系運算符
常見關(guān)系運算符
關(guān)系運算符的運算結(jié)果都是布爾(boolean)類型,要么是true,要么是false
public class RelationalOpr { public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a==b); System.out.println(a!=b); System.out.println(a>=b); System.out.println(a<=b); } }
結(jié)果如下:
注意:當需要多次判斷時,不能連著寫,比如:3<a<5
,程序與數(shù)學中是有區(qū)別的
4. 邏輯運算符
定義:用于判斷“并且”、“或者”、“除非”等邏輯關(guān)系。邏輯運算符兩端一般連接值為布爾類型的關(guān)系表達式
4.1 &&:邏輯與,并且
也稱短路與
布爾表達式1 && 布爾表達式2
:兩個表達式都為真的時候,整個表達式才是真
- 只要有?個是假,那整個表達式就是假
- 第?個表達式為假,后?不執(zhí)?
舉個栗子:
public class LogOperators { public static void main(String[] args) { int a = 1; int b = 2; System.out.println(a == 1 && b == 2); System.out.println(a == 1 && b > 100); System.out.println(a > 100 && b == 2); System.out.println(a > 100 && b > 100); } }
4.2 ||:邏輯或,或者
布爾表達式1 || 布爾表達式2
:只要有?個是真,整個表達式就是真
- 布爾表達式1為真,不執(zhí)?布爾表達式2
- 布爾表達式1為假,會繼續(xù)布爾表達式2
舉個栗子:
public class LogOperators { public static void main(String[] args) { int a = 1; int b = 2; System.out.println(a == 1 || b == 2); System.out.println(a == 1 || b > 100); System.out.println(a > 100 || b == 2); System.out.println(a > 100 || b > 100); } }
4.3 !:邏輯非,表示否定
語法規(guī)則:!表達式
真變假,假變真。
舉個栗子:
public class LogOperators { public static void main(String[] args) { int a = 1; System.out.println(!(a==1)); System.out.println(!(a!=1)); } }
4.4 短路求值
&&和||遵循短路求值的規(guī)則
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true
我們都知道,計算10 / 0
會導致程序拋出異常.但是上面的代碼卻能正常運行,說明10 / 0
并沒有真正被求值.
&
和|
如果表達式結(jié)果為boolean時,也表示邏輯運算.但與&&
||
相比,它們不支持短路求值.
System.out.println(10 > 20 & 10 / 0 == 0); // 程序拋出異常 System.out.println(10 < 20 | 10 / 0 == 0); // 程序拋出異常
5. 位操作符
如果位操作符,左右兩邊不是布爾表達式,那么他就代表位運算,且位運算操作的是二進制位
5.1 按位與&
對應位上有0就是0,對應位都是1的時候,這?位運算下來的結(jié)果就是1
5.2 按位或|
對應位上有1,就是1
5.3 按位異或
不?樣的位上進?或,?樣的位上是0
推論:哪?位上是1,那么這?位置上就不同
5.4 按位取反~
0變1,1變0
int a = 0x0000000f; System.out.printf("%x\n", ~a);//fffffff0 ?六進制:1 2 3 4 5 6 7 8 9 A B C D E F 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 1111 1111 1111 1111 0000 ~ f f f f f f f 0
6. 移位運算
移動的是二進制位
6.1 左移<<
最左側(cè)位不要了,最右側(cè)補0
用法舉例:
public class shftOperation { public static void main(String[] args) { int a = 0x10; System.out.printf("%x\n",a << 1); } }
6.2 右移>>
最右側(cè)位不要了,最左側(cè)補符號位(正數(shù)補0,負數(shù)補1)
用法舉例:
public class shftOperation { public static void main(String[] args) { int a = 0x10; System.out.printf("%x\n",a >> 1); } }
注意:沒有?符號數(shù)左移,因為第?位是符號位,移的話把符號位移?了
6.3 無符號右移>>>
最右側(cè)位不要了,最左側(cè)補0
用法舉例:
public class shftOperation { public static void main(String[] args) { int a = 0xffffffff; System.out.printf("%x\n",a >>> 1);//7fffffff } }
7. 條件運算符
語法格式:表達式1?表達式2:表達式3
如果表達式1為真,執(zhí)?表達式2,否則執(zhí)?表達式3
要么返回表達式2的結(jié)果,要么返回表達式3的結(jié)果,所以需要變量來接收
注意:表達式1必須是一個布爾表達式
用法舉例:
public class CondOpr { public static void main(String[] args) { int a = 10; int b = 20; int c = a>b?a:b; System.out.println(c);//20 } }
8.運算符的優(yōu)先級
就一句話:不確定的話,就加括號!
在Java中,對于運算符的優(yōu)先級考察不多,不像C語言那樣。
到此,對于Java中運算符的講解已經(jīng)完畢。
運算符之間是有優(yōu)先級的. 具體的規(guī)則我們不必記憶. 在可能存在歧義的代碼中加上括號即可
public class Swap { ? ? public static void main(String[] args) { ? ? ? ? System.out.println(3*4+1); ? ? ? ? System.out.println(3*(4+1)); ? ? } }
到此這篇關(guān)于Java運算符的文章就介紹到這了,更多相關(guān)Java運算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 語言實現(xiàn)清除帶 html 標簽的內(nèi)容方法
下面小編就為大家?guī)硪黄狫ava 語言實現(xiàn)清除帶 html 標簽的內(nèi)容方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02intellij idea 啟動tomcat 1099端口被占用的解決
這篇文章主要介紹了intellij idea 啟動tomcat 1099端口被占用的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09spring boot+ redis 接口訪問頻率限制的實現(xiàn)
這篇文章主要介紹了spring boot+ redis 接口訪問頻率限制的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01Spring mvc服務端數(shù)據(jù)校驗實現(xiàn)流程詳解
這篇文章主要介紹了Spring mvc服務端數(shù)據(jù)校驗實現(xiàn)流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09