這篇文章給大家分享的是有關(guān)Java操作符與其優(yōu)先級(jí)的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),留壩網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:留壩等地區(qū)。留壩做網(wǎng)站價(jià)格咨詢:18980820575
幾乎所有運(yùn)算符都只能操作“主類型”(Primitives)。例外是“=”、“= =”和“! =”,它們能操作所有對(duì)象。除此以外,String類支持“+”和“+=”。
基本類型存儲(chǔ)了實(shí)際的數(shù)值。而并非指向一個(gè)對(duì)象的引用。所以在為其賦值的時(shí)候,是直接把一個(gè)地方的內(nèi)容復(fù)制到了另一個(gè)地方。例如,對(duì)基本數(shù)據(jù)類型使用a=b,那么b的內(nèi)容就復(fù)制給了a。若接著修改了a,而b根本不會(huì)受這種修改的影響。(在上一篇java編程思想(2)中,我們就知道基本類型是存儲(chǔ)在堆棧中的。假設(shè)a=4,那么堆棧中如果沒(méi)有4,則會(huì)開(kāi)辟一個(gè)空間,使值為4。a=b之后,b也指向了堆棧中的這個(gè)4。此時(shí)a再等于5。那么會(huì)重新在堆棧中尋找5,若沒(méi)有則新開(kāi)辟使之為5,然后a指向5。故不會(huì)影響b)
但是在為對(duì)象“賦值”的時(shí)候,情況會(huì)發(fā)生變化。首先我們知道,對(duì)對(duì)象的操作,我們真正操作的是對(duì)對(duì)象的引用。所以倘若"將一個(gè)對(duì)象賦值給另一個(gè)對(duì)象",實(shí)際上是將“引用”從一個(gè)地方復(fù)制到另一個(gè)地方。這意味著如果對(duì)對(duì)象使用c=d之后,那么c和d都將指向原來(lái)只有d指向的那個(gè)對(duì)象(兩個(gè)遙控器(引用)都能操作按個(gè)電視機(jī)(對(duì)象)了)。
優(yōu)先級(jí):
| 優(yōu)先級(jí) | 結(jié)合性 | |
1 | 后綴運(yùn)算符 | [ ] . ( ) (函數(shù)呼叫) | 從左到右 |
2 | 單目運(yùn)算符 | ! ~ ++ -- +(單操作數(shù)) –(單操作數(shù)) | 從右到左 |
3 | 創(chuàng)建 | new | 從左到右 |
4 | 乘除 | * / % | 從左到右 |
5 | 加減 | + - | 從左到右 |
6 | 移位 | << >> >>> | 從左到右 |
7 | 關(guān)系 | < <= > >= instanceof | 從左到右 |
8 | 相等 | == != | 從左到右 |
9 | 按位與 | & | 從左到右 |
10 | 按位異或 | ^ | 從左到右 |
11 | 按位或 | | | 從左到右 |
12 | 邏輯與 | && | 從左到右 |
13 | 邏輯或 | || | 從左到右 |
14 | 條件 | ? : | 從右到左 |
15 | 賦值 | = += -= *= /= %= ^= <<= >>= >>>= | 從右到左 |
(1)賦值
主類型使用“A=B”,那么B處的內(nèi)容就復(fù)制到A。若修改A,那么B根本不會(huì)受修改的影響。
對(duì)象“賦值”的時(shí)候情況發(fā)生了變化。對(duì)一個(gè)對(duì)象進(jìn)行操作時(shí),我們真正操作的是它的句柄。所以倘若“從一個(gè)對(duì)象到另一個(gè)對(duì)象”賦值,實(shí)際就是將句柄從一個(gè)地方復(fù)制到另一個(gè)地方。這意味著假若為對(duì)象使用“C=D”,那么C和D最終都會(huì)指向最初只有D才指向的那個(gè)對(duì)象。
short s1 = 1; s1 = s1 + 1; (s1+1運(yùn)算結(jié)果是int型,需要強(qiáng)制轉(zhuǎn)換類型)
short s1 = 1; s1 += 1;(可以正確編譯) +=運(yùn)算符無(wú)類型轉(zhuǎn)換問(wèn)題
(2)算術(shù)運(yùn)算符
Java的算術(shù)運(yùn)算符:加號(hào)(+)、減號(hào)(-)、除號(hào)(/)、乘號(hào)(*)以及模數(shù)(%,從整數(shù)除法中獲得余數(shù))。整數(shù)除法會(huì)直接砍掉小數(shù),而不是進(jìn)位。
(3)自動(dòng)遞增、遞減
對(duì)于前遞增和前遞減(如++A或--A),會(huì)先執(zhí)行運(yùn)算,再生成值。
對(duì)于后遞增和后遞減(如A++或A--),會(huì)先生成值,再執(zhí)行運(yùn)算。
(4)關(guān)系運(yùn)算符
關(guān)系運(yùn)算符包括<、>、<=、>=、= =、!=
等于和不等于適用于所有內(nèi)建的數(shù)據(jù)類型,但其他比較不適用于boolean類型。
想對(duì)比兩個(gè)對(duì)象的實(shí)際內(nèi)容是否相同,必須使用所有對(duì)象都適用的特殊方法equals()。
equals()方法不適用于“主類型”,那些類型直接使用= =和!=即可。
equals()的默認(rèn)是比較句柄。所以除非在自己的新類中改變了equals(),否則不可能表現(xiàn)出我們希望的行為
大多數(shù)Java類庫(kù)都實(shí)現(xiàn)了equals(),所以它實(shí)際比較的是對(duì)象的內(nèi)容,而非它們的句柄
= =和! =比較的是對(duì)象句柄,而不是對(duì)象的實(shí)際內(nèi)容
(5)邏輯運(yùn)算符
邏輯運(yùn)算符&&、||、!能生成一個(gè)布爾值
&和&&都可作為邏輯運(yùn)算符“與”使用,但是&&是“短路與”,運(yùn)算時(shí)先判斷符號(hào)前面的表達(dá)式的值,如果能夠確定整個(gè)表達(dá)式的值,則不進(jìn)行符號(hào)后面的表達(dá)式的運(yùn)算。
另外,&可作為位運(yùn)算符使用
(6)按位運(yùn)算符
按位AND運(yùn)算符(&)
按位OR運(yùn)算符(|)
按位XOR(^,異或)
按位NOT(~,也叫作“非”運(yùn)算符)屬于一元運(yùn)算符,生成與輸入位的相反的值
(7)移位運(yùn)算符
左移位運(yùn)算符(<<)能將運(yùn)算對(duì)象向左移動(dòng)運(yùn)算符右側(cè)指定的位數(shù)(在低位補(bǔ)0)。
有符號(hào)右移位運(yùn)算符(>>)將運(yùn)算對(duì)象向右移動(dòng)運(yùn)算符右側(cè)指定的位數(shù)。有符號(hào)右移位運(yùn)算符使用了符號(hào)擴(kuò)展:若值為正,則在高位插入0;若值為負(fù),則在高位插入1
無(wú)符號(hào)右移位運(yùn)算符(>>>),它使用了“零擴(kuò)展”:無(wú)論正負(fù),都在高位插入0
(8)三元IF-ELSE運(yùn)算符
布爾表達(dá)式 ? 值0:值1 “布爾表達(dá)式”的結(jié)果為true,就計(jì)算“值0”,否則計(jì)算“值1”
(9)字符串運(yùn)算符+
int x = 0, y = 1, z = 2; System.out.println(“out:” + x + y + z);
在這里,Java編譯程序會(huì)將x,y和z轉(zhuǎn)換成它們的字串形式,而不是先把它們加到一起
運(yùn)用“String +”時(shí),若表達(dá)式以一個(gè)String起頭,那么后續(xù)所有運(yùn)算對(duì)象都會(huì)轉(zhuǎn)換到字串。
想通過(guò)“加號(hào)”連接字串(使用Java的早期版本),請(qǐng)務(wù)必保證第一個(gè)元素是字串
(10)造型(Cast)運(yùn)算符
對(duì)于“縮小轉(zhuǎn)換”(Narrowing Conversion)的操作(能容納更多信息的數(shù)據(jù)類型,將其轉(zhuǎn)換成容量較小的類型,例如int轉(zhuǎn)short),此時(shí)就可能面臨信息丟失的危險(xiǎn)。此時(shí),編譯器會(huì)強(qiáng)迫我們進(jìn)行明確造型
對(duì)于“放大轉(zhuǎn)換”(Widening conversion),則不必進(jìn)行明確造型,因?yàn)樾骂愋涂隙苋菁{原來(lái)類型的信息,不會(huì)造成任何信息的丟失
布爾值(bollean)根本不允許進(jìn)行任何造型處理,其它任何主類型可互相造型
將float或double值造型成整數(shù)值后,總是將小數(shù)部分“砍掉”,不作任何進(jìn)位處理
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12 Math.round(-11.5)==-11
round方法返回與參數(shù)最接近的長(zhǎng)整數(shù),參數(shù)加1/2后求其floor.
感謝各位的閱讀!關(guān)于“Java操作符與其優(yōu)先級(jí)的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!