您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Java操作符與其優先級的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
幾乎所有運算符都只能操作“主類型”(Primitives)。例外是“=”、“= =”和“! =”,它們能操作所有對象。除此以外,String類支持“+”和“+=”。
基本類型存儲了實際的數值。而并非指向一個對象的引用。所以在為其賦值的時候,是直接把一個地方的內容復制到了另一個地方。例如,對基本數據類型使用a=b,那么b的內容就復制給了a。若接著修改了a,而b根本不會受這種修改的影響。(在上一篇java編程思想(2)中,我們就知道基本類型是存儲在堆棧中的。假設a=4,那么堆棧中如果沒有4,則會開辟一個空間,使值為4。a=b之后,b也指向了堆棧中的這個4。此時a再等于5。那么會重新在堆棧中尋找5,若沒有則新開辟使之為5,然后a指向5。故不會影響b)
但是在為對象“賦值”的時候,情況會發生變化。首先我們知道,對對象的操作,我們真正操作的是對對象的引用。所以倘若"將一個對象賦值給另一個對象",實際上是將“引用”從一個地方復制到另一個地方。這意味著如果對對象使用c=d之后,那么c和d都將指向原來只有d指向的那個對象(兩個遙控器(引用)都能操作按個電視機(對象)了)。
優先級:
| 優先級 | 結合性 | |
1 | 后綴運算符 | [ ] . ( ) (函數呼叫) | 從左到右 |
2 | 單目運算符 | ! ~ ++ -- +(單操作數) –(單操作數) | 從右到左 |
3 | 創建 | new | 從左到右 |
4 | 乘除 | * / % | 從左到右 |
5 | 加減 | + - | 從左到右 |
6 | 移位 | << >> >>> | 從左到右 |
7 | 關系 | < <= > >= instanceof | 從左到右 |
8 | 相等 | == != | 從左到右 |
9 | 按位與 | & | 從左到右 |
10 | 按位異或 | ^ | 從左到右 |
11 | 按位或 | | | 從左到右 |
12 | 邏輯與 | && | 從左到右 |
13 | 邏輯或 | || | 從左到右 |
14 | 條件 | ? : | 從右到左 |
15 | 賦值 | = += -= *= /= %= ^= <<= >>= >>>= | 從右到左 |
(1)賦值
主類型使用“A=B”,那么B處的內容就復制到A。若修改A,那么B根本不會受修改的影響。
對象“賦值”的時候情況發生了變化。對一個對象進行操作時,我們真正操作的是它的句柄。所以倘若“從一個對象到另一個對象”賦值,實際就是將句柄從一個地方復制到另一個地方。這意味著假若為對象使用“C=D”,那么C和D最終都會指向最初只有D才指向的那個對象。
short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型)
short s1 = 1; s1 += 1;(可以正確編譯) +=運算符無類型轉換問題
(2)算術運算符
Java的算術運算符:加號(+)、減號(-)、除號(/)、乘號(*)以及模數(%,從整數除法中獲得余數)。整數除法會直接砍掉小數,而不是進位。
(3)自動遞增、遞減
對于前遞增和前遞減(如++A或--A),會先執行運算,再生成值。
對于后遞增和后遞減(如A++或A--),會先生成值,再執行運算。
(4)關系運算符
關系運算符包括<、>、<=、>=、= =、!=
等于和不等于適用于所有內建的數據類型,但其他比較不適用于boolean類型。
想對比兩個對象的實際內容是否相同,必須使用所有對象都適用的特殊方法equals()。
equals()方法不適用于“主類型”,那些類型直接使用= =和!=即可。
equals()的默認是比較句柄。所以除非在自己的新類中改變了equals(),否則不可能表現出我們希望的行為
大多數Java類庫都實現了equals(),所以它實際比較的是對象的內容,而非它們的句柄
= =和! =比較的是對象句柄,而不是對象的實際內容
(5)邏輯運算符
邏輯運算符&&、||、!能生成一個布爾值
&和&&都可作為邏輯運算符“與”使用,但是&&是“短路與”,運算時先判斷符號前面的表達式的值,如果能夠確定整個表達式的值,則不進行符號后面的表達式的運算。
另外,&可作為位運算符使用
(6)按位運算符
按位AND運算符(&)
按位OR運算符(|)
按位XOR(^,異或)
按位NOT(~,也叫作“非”運算符)屬于一元運算符,生成與輸入位的相反的值
(7)移位運算符
左移位運算符(<<)能將運算對象向左移動運算符右側指定的位數(在低位補0)。
有符號右移位運算符(>>)將運算對象向右移動運算符右側指定的位數。有符號右移位運算符使用了符號擴展:若值為正,則在高位插入0;若值為負,則在高位插入1
無符號右移位運算符(>>>),它使用了“零擴展”:無論正負,都在高位插入0
(8)三元IF-ELSE運算符
布爾表達式 ? 值0:值1 “布爾表達式”的結果為true,就計算“值0”,否則計算“值1”
(9)字符串運算符+
int x = 0, y = 1, z = 2; System.out.println(“out:” + x + y + z);
在這里,Java編譯程序會將x,y和z轉換成它們的字串形式,而不是先把它們加到一起
運用“String +”時,若表達式以一個String起頭,那么后續所有運算對象都會轉換到字串。
想通過“加號”連接字串(使用Java的早期版本),請務必保證第一個元素是字串
(10)造型(Cast)運算符
對于“縮小轉換”(Narrowing Conversion)的操作(能容納更多信息的數據類型,將其轉換成容量較小的類型,例如int轉short),此時就可能面臨信息丟失的危險。此時,編譯器會強迫我們進行明確造型
對于“放大轉換”(Widening conversion),則不必進行明確造型,因為新類型肯定能容納原來類型的信息,不會造成任何信息的丟失
布爾值(bollean)根本不允許進行任何造型處理,其它任何主類型可互相造型
將float或double值造型成整數值后,總是將小數部分“砍掉”,不作任何進位處理
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12 Math.round(-11.5)==-11
round方法返回與參數最接近的長整數,參數加1/2后求其floor.
感謝各位的閱讀!關于“Java操作符與其優先級的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。