Java 語法介紹(二):運算子(轉)
Java 語法介紹(二):運算子(轉)[@more@]1:優先順序
優先順序是指同一式子中多個運算子被執行和次序,同一級裡的運算子具有相同的優先順序,相同優先順序得運算子號相遇是,根據結合性決定運算次序,下面從高到低的優先順序列出了運算子。同一行中的運算子優先順序相同。
. [] () 結合性從左到右
++ -- ! ~ 結合性從左到右
* / % 結合性從左到右
+ - 結合性從左到右
<> >>> 結合性從左到右
<= >= 結合性從左到右
== != 結合性從左到右
& 結合性從左到右
^ 結合性從左到右
&& 結合性從左到右
|| 結合性從左到右
?: 結合性從右到左
= 結合性從右到左
例如對於表示式:a=b+c*d/(c^d),因為括號優先順序最高,所以先計算c^d,接著是c*d,然後除以c^d,最後,把上述結果與b的和儲存到變數a中。
2:整型運算子
整型運算子按運算元的多少可分為一元和二元兩類,一元運算子一次對一個變數進行操作,二元運算子一次對兩個變數進行操作。對於運算來說,如果有一個變數或運算元是長整型的,那麼結果就肯定是長整型的,否則即使運算元還沒有確定是位元組型、短整型或字元型,運算結果都是整型,下表是一元運算子。
運算子 實際操作 例子
- 改變整型數符號 -i
~ 位運算:非 ~i
++ 加1 i++
-- 減1 i--
注:一元取反運算子(-)用來改變整數的正負號,逐位求反把所變數所有是1的位變成0,是0的位變成1,加加和減減(++,--)把變數的值加1或減1。
以下是一個具體例子:
int i=0;
int j=1;
for (i=1;i<10;i++)
{
j--;
System.out.println(i+""+j+"");
}
一元運算子執行的方式是改變它們所作用的變數的值,對一元取反和逐位求反來說,變數的值並不改變,而對加和減運算(++,--)來說,就量的值被改變了,例如:
int i=10,j=10,k=10,l=10;
System.out.println(i+""+j+""+k+""+l+"");
j++;
i--;
~k;
-l;
System.out.println(i+""+j+""+k+""+l+"");
注意:j和i被改變並列印出它們的新值,可是k和l仍然為原來的數值,當在複合表示式中使用一元取反和逐位求餘運算時,你實際上是在用一個臨時存貯運算元的新值。
++和--既是前置運算子也是後置運算子,這就是說,它們既可以放在運算元前面(++x),也可以放在後面(x++),如果它們被用在複合語句中如:
i=x++; 或 i=++x;
那麼第一個語句中x把值賦給i以後再加1,而第二個語句先把x加1,再把新的x值賦給i。
整型運算子的第二種型別是二元運算子,這種運算並不改變運算元的值,而是返回一個必須賦給變數的值,下表列出了二元運算子。
運算子 實際操作 例子
+ 加運算 a+b
- 減運算 a-b
* 乘運算 a*b
/ 除運算 a/b
% 取模運算 a%b
& 與運算 a&b
| 或運算 a|b
^ 異或運算 a^b
<< 左移 a< >> 右移 a>>b
>>> 右移 a>>>b
注意:>>與>>>的基本功能都是右移,但>>是用符號位來填充右移後所留下的空位,而>>>則是用零來填充右移後所留下的空位。
還有一類運算,它們形如:j-=i,這裡-=是二元運算-和賦值運算=的複合運算,它等價於j=j-i,這種複合方式適用於所有的二元運算子。
這裡有幾點關於整型運算進一步說明,首先,整數除法向靠近0的方向取整;其次,如果你除以0或者對0取模,程式就會在執行時被強行中止,如果你的運算結果超出最小極限,或者說是下溢,結果將為0,如果超出了最大極限,就將會導致結果的迴繞。
3:布林運算子
另外還有一些運算子能產生布林型別的結果,我們把它們稱為布林運算子,下表列出了這些運算子。
運算子 實際操作 例子
< 小於 a > 大於 a>b
<= 小於等於 a<=b
> 大於等於 a>=b
== 等於 a==b
!= 不等於 a!=b
在這裡要指出的是相等運算子==可能會給你帶來許多麻煩,很多人在比較兩個值時往往錯用了等號=,以致於變成了賦值操作,所以在程式設計中一定要注意你在比較數值時用的是==。布林型別本身還有幾個邏輯運算子,它們可以對布林型別的資料進行運算:!,&&,//
其實如果你把布林型別的值true等效地看成1,false看成0,那麼對於相同的運算子,整型運算的法則對布林型別也是適用的。
布林運算子中還有一種三元運算子,它的格式如下:
Operand ? Statement1:Statement2
在這個式子中,先計算Operand的真假,若為真,則執行Statement1,若為假,則執行Statement2。下面的程式碼給出了這種運算的一個例子:
(a>b)?a:b;
這個表示式將返回a和b中較大的那個數值。
4:浮點型運算子
傳統的浮點型二元運算除了賦值運算子(+=,-=.*=./)取模(%)和取模賦值(%=0)使浮點數值等價於整數除法,同樣,++和--使變數的值增加或減小1。
同整型變數相似,結果被放在最大長度的型別裡,如果運算包括兩個浮點型別,結果也是個浮點型別,如果有一個或幾個是雙精度浮點型,結果就是雙精度浮點型,當你使用關係運算子:>、=、<=、==和!=時,注意浮點變數與整型的不同,只有a==b成立並不能說明 ab不成立,這是因為浮點型別數值次序同整型不同,當你寫程式,對浮點型數值進行假設時要小心,浮點型數值也包括inf,代表無窮大,溢位產生無窮大inf,下溢產生0。
5:字串運算子
+運算子可以把字串並置起來,如果哪一個運算元不是字串,在並置之前它會被轉換成字串,另外,+=運算子把兩個字串並置的結果放進第一個字串裡,在前面的例子裡,當你想把幾項列印在同一行裡時使用的是+運算子,試著在直譯器裡用System.out.println和+運算子來造成不同的組合輸出。
優先順序是指同一式子中多個運算子被執行和次序,同一級裡的運算子具有相同的優先順序,相同優先順序得運算子號相遇是,根據結合性決定運算次序,下面從高到低的優先順序列出了運算子。同一行中的運算子優先順序相同。
. [] () 結合性從左到右
++ -- ! ~ 結合性從左到右
* / % 結合性從左到右
+ - 結合性從左到右
<> >>> 結合性從左到右
<= >= 結合性從左到右
== != 結合性從左到右
& 結合性從左到右
^ 結合性從左到右
&& 結合性從左到右
|| 結合性從左到右
?: 結合性從右到左
= 結合性從右到左
例如對於表示式:a=b+c*d/(c^d),因為括號優先順序最高,所以先計算c^d,接著是c*d,然後除以c^d,最後,把上述結果與b的和儲存到變數a中。
2:整型運算子
整型運算子按運算元的多少可分為一元和二元兩類,一元運算子一次對一個變數進行操作,二元運算子一次對兩個變數進行操作。對於運算來說,如果有一個變數或運算元是長整型的,那麼結果就肯定是長整型的,否則即使運算元還沒有確定是位元組型、短整型或字元型,運算結果都是整型,下表是一元運算子。
運算子 實際操作 例子
- 改變整型數符號 -i
~ 位運算:非 ~i
++ 加1 i++
-- 減1 i--
注:一元取反運算子(-)用來改變整數的正負號,逐位求反把所變數所有是1的位變成0,是0的位變成1,加加和減減(++,--)把變數的值加1或減1。
以下是一個具體例子:
int i=0;
int j=1;
for (i=1;i<10;i++)
{
j--;
System.out.println(i+""+j+"");
}
一元運算子執行的方式是改變它們所作用的變數的值,對一元取反和逐位求反來說,變數的值並不改變,而對加和減運算(++,--)來說,就量的值被改變了,例如:
int i=10,j=10,k=10,l=10;
System.out.println(i+""+j+""+k+""+l+"");
j++;
i--;
~k;
-l;
System.out.println(i+""+j+""+k+""+l+"");
注意:j和i被改變並列印出它們的新值,可是k和l仍然為原來的數值,當在複合表示式中使用一元取反和逐位求餘運算時,你實際上是在用一個臨時存貯運算元的新值。
++和--既是前置運算子也是後置運算子,這就是說,它們既可以放在運算元前面(++x),也可以放在後面(x++),如果它們被用在複合語句中如:
i=x++; 或 i=++x;
那麼第一個語句中x把值賦給i以後再加1,而第二個語句先把x加1,再把新的x值賦給i。
整型運算子的第二種型別是二元運算子,這種運算並不改變運算元的值,而是返回一個必須賦給變數的值,下表列出了二元運算子。
運算子 實際操作 例子
+ 加運算 a+b
- 減運算 a-b
* 乘運算 a*b
/ 除運算 a/b
% 取模運算 a%b
& 與運算 a&b
| 或運算 a|b
^ 異或運算 a^b
<< 左移 a< >> 右移 a>>b
>>> 右移 a>>>b
注意:>>與>>>的基本功能都是右移,但>>是用符號位來填充右移後所留下的空位,而>>>則是用零來填充右移後所留下的空位。
還有一類運算,它們形如:j-=i,這裡-=是二元運算-和賦值運算=的複合運算,它等價於j=j-i,這種複合方式適用於所有的二元運算子。
這裡有幾點關於整型運算進一步說明,首先,整數除法向靠近0的方向取整;其次,如果你除以0或者對0取模,程式就會在執行時被強行中止,如果你的運算結果超出最小極限,或者說是下溢,結果將為0,如果超出了最大極限,就將會導致結果的迴繞。
3:布林運算子
另外還有一些運算子能產生布林型別的結果,我們把它們稱為布林運算子,下表列出了這些運算子。
運算子 實際操作 例子
< 小於 a > 大於 a>b
<= 小於等於 a<=b
> 大於等於 a>=b
== 等於 a==b
!= 不等於 a!=b
在這裡要指出的是相等運算子==可能會給你帶來許多麻煩,很多人在比較兩個值時往往錯用了等號=,以致於變成了賦值操作,所以在程式設計中一定要注意你在比較數值時用的是==。布林型別本身還有幾個邏輯運算子,它們可以對布林型別的資料進行運算:!,&&,//
其實如果你把布林型別的值true等效地看成1,false看成0,那麼對於相同的運算子,整型運算的法則對布林型別也是適用的。
布林運算子中還有一種三元運算子,它的格式如下:
Operand ? Statement1:Statement2
在這個式子中,先計算Operand的真假,若為真,則執行Statement1,若為假,則執行Statement2。下面的程式碼給出了這種運算的一個例子:
(a>b)?a:b;
這個表示式將返回a和b中較大的那個數值。
4:浮點型運算子
傳統的浮點型二元運算除了賦值運算子(+=,-=.*=./)取模(%)和取模賦值(%=0)使浮點數值等價於整數除法,同樣,++和--使變數的值增加或減小1。
同整型變數相似,結果被放在最大長度的型別裡,如果運算包括兩個浮點型別,結果也是個浮點型別,如果有一個或幾個是雙精度浮點型,結果就是雙精度浮點型,當你使用關係運算子:>、=、<=、==和!=時,注意浮點變數與整型的不同,只有a==b成立並不能說明 ab不成立,這是因為浮點型別數值次序同整型不同,當你寫程式,對浮點型數值進行假設時要小心,浮點型數值也包括inf,代表無窮大,溢位產生無窮大inf,下溢產生0。
5:字串運算子
+運算子可以把字串並置起來,如果哪一個運算元不是字串,在並置之前它會被轉換成字串,另外,+=運算子把兩個字串並置的結果放進第一個字串裡,在前面的例子裡,當你想把幾項列印在同一行裡時使用的是+運算子,試著在直譯器裡用System.out.println和+運算子來造成不同的組合輸出。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-958037/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java基本語法--運算子Java
- Java 語法介紹(六):迴圈(轉)Java
- Java 語法介紹(四):陣列(轉)Java陣列
- Java 語法介紹(三):變數(轉)Java變數
- java運算子和表示式詳細介紹Java
- 【筆記】Python基礎(二)運算子介紹筆記Python
- Java 語法介紹(五):條件控制(轉)Java
- Java 語法介紹(一):Java語言的基本組成(轉)Java
- Java 語法介紹(七):Brake和Label(轉)Java
- javascript運算子語法概述JavaScript
- Java基礎語法:運算子、包機制、JavaDocJava
- js使用與或運算子替代if語句簡單介紹JS
- javascript等號==運算子用法介紹JavaScript
- javascript &&和||運算子簡單介紹JavaScript
- javascript的in運算子簡單介紹JavaScript
- js與&&運算子簡單介紹JS
- PHP開發之運算子使用介紹PHP
- 四,Java運算子詳細分類及使用方法介紹Java
- 學習筆記二--Weex語法介紹筆記
- day02 Java基本語法( 上 ): 變數與運算子Java變數
- javascript賦值運算子等號=深入介紹JavaScript賦值
- javascript一元運算子簡單介紹JavaScript
- JavaScript 語法介紹JavaScript
- shell 語法介紹
- MarkDown 語法介紹
- 介紹python中運算子優先順序Python
- php遞增和遞減運算子的介紹PHP
- ECMAScript 安全賦值運算子 (?=) 提案介紹及其 Polyfill賦值
- clang常用語法介紹
- Java 運算子Java
- Java運算子Java
- 細數Java的語法糖(一): 用於字串拼接的 "+" 運算子Java字串
- 細數Java的語法糖(一): 用於字串拼接的 “+” 運算子Java字串
- python基礎語法2---運算子Python
- Java語言的12大特色介紹(轉)Java
- javascript的逗號運算子的用法簡單介紹JavaScript
- js的邏輯與&&運算子用法簡單介紹JS
- js 加號+運算子字串連線簡單介紹JS字串