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