?一抬伺、概述
java運算符主要分為六大類:算術(shù)運算符螟够、關(guān)系運算符、邏輯運算符峡钓、位運算符妓笙、賦值運算符和條件運算符。
Java運算符
二能岩、算術(shù)運算符
Java的算術(shù)運算符主要有:加(+)寞宫、減(-)、乘()拉鹃、除(/)辈赋、取余(%)*,當(dāng)算術(shù)表達(dá)式中存在不同的基本數(shù)據(jù)類型的值的時候膏燕,整個算術(shù)表達(dá)式的類型會自動進(jìn)行提升钥屈。
byte類型,short類型和char類型將被提升到int類型坝辫,不管是否有其他類型參與運算篷就。
整個表達(dá)式的類型自動提升到與表達(dá)式中最高等級的操作數(shù)相同的類型
等級順序:byte,short阀溶,char → int → long → float → double
從這個順序我們可以看出byte腻脏、short、char是最低的银锻,所以在程序開發(fā)中我們很少使用byte或者short類型定義整數(shù)永品。基本不會使用char類型定義字符击纬,而使用字符串類型鼎姐,更不會使用char類型做算術(shù)運算。
int a = 2; int b = 5; System.out.println("a+b="+(a+b)); System.out.println("b-a="+(b-a)); System.out.println("a*b="+(a*b)); System.out.println("b/a="+(b/a)); System.out.println("b%a="+(b%a));? //當(dāng)出現(xiàn)不同類型的數(shù)據(jù)時,因為float>int,所有結(jié)果會自動轉(zhuǎn)為float型 float c = 2.2f; System.out.println("c+b="+(c+b)); System.out.println("b-c="+(b-c)); System.out.println("c*b="+(c*b)); System.out.println("b/c="+(b/c)); 輸出: a+b=7 b-a=3 a*b=10 b/a=2 b%a=1 c+b=7.2 b-c=2.8 c*b=11.0 b/c=2.2727273
二炕桨、賦值運算符
賦值運算符主要有:=饭尝、+=、-=献宫、*=钥平、/=、%=姊途、++涉瘾、--,賦值運算符是將一個表達(dá)式的值賦值給左邊捷兰,左邊不能是一個常量立叛,必須是可變的。
int a = 2;//最常見的賦值 int b = 5;? int c = 0; c += b;//c=c+b System.out.println("c += b--->c="+c);//c=0+5 c -= a;//c=c-a System.out.println("c -= a--->c="+c);//c=5-2 c *= a;//c=c*a System.out.println("c *= a--->c="+c);//c=3*2 c /= a;//c=c/a System.out.println("c /= a--->c="+c);//c=6/2 c %= a;//c=c%a System.out.println("c /= a--->c="+c);//c=3%2
關(guān)于自增(++)與自減(--)詳解
(1)(i++贡茅、i--)先賦值秘蛇、再運算
(2)(++i、--i)先運算顶考、再賦值
int i = 2;int a = i++;//先賦值再運算赁还,即:先將i(此時i=2)賦值給a,再進(jìn)行++運算i村怪,i=i+1=3System.out.println(a);//輸出2System.out.println(i);//輸出3?int t = 2;System.out.println(t++);//先輸出t(此時t=2)秽浇,輸出2System.out.println(t);//上一步已做了t++操作浮庐,所以輸出3
int i = 2;int a = ++i;//先運算再賦值甚负,即:先進(jìn)行++運算i,i=i+1=3审残,再將i(此時i=3)賦值給a梭域,System.out.println(a);//輸出3System.out.println(i);//輸出3?int t = 2;System.out.println(++t);//先進(jìn)行++運算(此時t=t+1),輸出3System.out.println(t);//上一步已做了t++操作搅轿,所以輸出3
三病涨、關(guān)系運算符
關(guān)系運算符主要有:==、!=璧坟、>既穆、<、>=雀鹃、<=幻工,關(guān)系運算符一般稱為“比較運算符”,通常用來比較兩個常量或變量的大小黎茎,當(dāng)運算符關(guān)系成立時囊颅,結(jié)果為true,否則為false。
關(guān)系運算符的優(yōu)先級為:>踢代、<盲憎、>=、<= 具有相同的優(yōu)先級胳挎,并且高于具有相同優(yōu)先級的 !=饼疙、==。關(guān)系運算符的優(yōu)先級高于賦值運算符而低于算術(shù)運算符慕爬,結(jié)合方向是自左向右宏多。
四、邏輯運算符
邏輯運算符主要有:&澡罚、|伸但、^、!留搔、&&更胖、||。
(1)&和&&都表示與隔显,有且僅當(dāng)a却妨、b都為true時,結(jié)果為true括眠,&&有短路的效果彪标,當(dāng)?shù)谝粋€當(dāng)前條件為false時,后面的條件就不執(zhí)行掷豺,結(jié)果為false捞烟,&要對所有的條件進(jìn)行判斷
(2)|和||都表示或,有且僅當(dāng)a当船、b都為false時题画,結(jié)果為false,||有短路的效果德频,當(dāng)?shù)谝粋€當(dāng)前條件為true時苍息,后面的條件就不執(zhí)行,結(jié)果為true壹置,|要對所有的條件進(jìn)行判斷竞思。
(3)異或(^)運算規(guī)則:當(dāng)兩邊同為true或者同為false時,結(jié)果都為false钞护;當(dāng)兩邊為false和true時盖喷,結(jié)果為true。
int a = 10;int b = 20;float c = 2.1f;System.out.println((a<b) & (c>0));//先判斷a<b為true患亿,再判斷c>0為true传蹈,結(jié)果為trueSystem.out.println((a>b) & (c>0));//先判斷a>b為false押逼,再判斷c>0為true,結(jié)果為falseSystem.out.println((a>b) && (c>0));//因為a>b為false惦界,所以后面c>0就不判斷挑格,結(jié)果為falseSystem.out.println((a<b) && (c>0));//因為a<b為true,所以繼續(xù)判斷c>0為true沾歪,結(jié)果為trueSystem.out.println((a<b) && (c<0));//因為a<b為true漂彤,所以繼續(xù)判斷c<0為false,結(jié)果為falseSystem.out.println((a>b) | (c>0));//先判斷a>b為false灾搏,再判斷c>0為true挫望,結(jié)果為trueSystem.out.println((a>b) | (c<0));//先判斷a>b為false,再判斷c<0為false狂窑,結(jié)果為falseSystem.out.println((a>b) || (c>0));//因為a>b為false媳板,所以繼續(xù)判斷c>0為true,結(jié)果為trueSystem.out.println((a>b) || (c<0));//因為a>b為false泉哈,所以繼續(xù)判斷c<0為false蛉幸,結(jié)果為falseSystem.out.println((a<b) || (c>0));//因為a<b為true,所以后面c>0就不判斷丛晦,結(jié)果為trueSystem.out.println(true ^ true);//結(jié)果為falseSystem.out.println(false ^ false);//結(jié)果為falseSystem.out.println(false ^ true);//結(jié)果為true
五奕纫、位運算符
位運算符主要有:~、&烫沙、&匹层、^、>>锌蓄、<<升筏、>>>,位運算符主要針對二進(jìn)制運算煤率。運算時需要先將十進(jìn)制轉(zhuǎn)為二進(jìn)制(注意一個字節(jié)有8位仰冠,前面需補0)
(1)與運算(&)
只有兩個位同為1時,結(jié)果才為1蝶糯,都在為0
int a = 16;//二進(jìn)制為0001 0000int b = 20;//二進(jìn)制為0001 0100System.out.println(Integer.toBinaryString(a));//輸出其二進(jìn)制0001 0000System.out.println(Integer.toBinaryString(b));//輸出其二進(jìn)制0001 0100System.out.println("a 和b 與的結(jié)果是:"+(a&b));//輸出16
詳解:
16: 0001 0000
<u style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">20: 0001 0100</u>
值16: 10000
(2)或運算符(|)
兩個位只要有一個為1,結(jié)果就是1辆沦,否則為0
int a = 19;//二進(jìn)制為0001 0011int b = 22;//二進(jìn)制為0001 0110System.out.println(Integer.toBinaryString(a));System.out.println(Integer.toBinaryString(b));System.out.println("a 和b 或的結(jié)果是:"+(a|b));//輸出23
詳解:
19: 0001 0011
22: <u style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">0001 0110</u>
值23: 0001 0111
(3)非運算符(~)
如果位為0昼捍,結(jié)果是1,如果位為1肢扯,結(jié)果是0妒茬。
int a = 4;//二進(jìn)制為0000 0100System.out.println("a 非的結(jié)果是:"+(~a));//輸出-5
詳解:
4: <u style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">0000 0100</u>
值-5: 1111 1011
注意:二進(jìn)制中,最高位是符號位 1表示負(fù)數(shù)蔚晨,0表示正數(shù)
(4)異或運算符(^)
如果兩個位相同乍钻,結(jié)果就為0肛循,不同結(jié)果就為1
int a = 7;//二進(jìn)制為111int b = 20;//二進(jìn)制為10100System.out.println("a 和b 異或的結(jié)果是:"+(a^b));//輸出19
詳解:
7: 0000 0111
20: <u style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">0001 0100</u>
值19: 0001 0011
(5)左移運算符(<<)
就是將所有的位向左移動多少位
int a = 7;//二進(jìn)制為111System.out.println("a 左移2位的結(jié)果是:"+(a<<2));//輸出28
詳解:
操作前00000111
左移后00011100
尾部補0,首位去0
a<<b 快速計算: a << b = a * 2b
(6)右移運算符(>>)
規(guī)則同左移運算符
六银择、條件運算符
關(guān)系表達(dá)式?表達(dá)式1:表達(dá)式2(相當(dāng)于ifelse)
int a = 7;int b = 20;System.out.println(a>b?"a大于b":"a小于b");//a小于b
文末總結(jié):
在我們平時實際開發(fā)中多糠,我們要著重掌握算術(shù)運算符、賦值運算符中的自增自減和(+=浩考、-=夹孔、=)、關(guān)系運算符析孽、邏輯運算符的(&&搭伤、||、!)袜瞬,這些使用率非常高怜俐,位運算符的話一般情況下用的比較少,除了某些特定的技術(shù)邓尤。條件運算符相當(dāng)于ifelse簡寫佑菩,能有效的簡化代碼,需要重點掌握裁赠。
另外我還準(zhǔn)備了Java運算符的視頻教程供各位小伙伴們學(xué)習(xí):
想要學(xué)習(xí)了解關(guān)于Java運算符等的更多知識殿漠,可以點贊轉(zhuǎn)發(fā)加關(guān)注,然后私信回復(fù)【Java集合1001】即可免費得到獲取方式啦佩捞,免費绞幌,免費,免費一忱,重要的事情說三遍莲蜘。