文章目錄
運算符是一種特殊的符号,用以表示資料的運算、指派和比較等。
Java語言中的運算符可分為如下幾種。
- 類型相關運算符
Java支援所有的基本算術運算符,這些算術運算符用于執行基本的數學運算:加、減、乘、除和求 餘等。下面是7個基本的算術運算符。
- +:加法運算符。
- -: 減法運算符。
- *: 乘法運算符
-
/: 除法運算符。
除法運算符有些特殊,如果除法運算符的兩個操作數都是整數類型,則計算結果 也是整數,就是将自然除法的結果截斷取整,例如19/4的結果是4,而不是5。如果除法運算符的兩個操作數都是整數類型,則除數不可以是0,否則将引發除以零異常。
但如果除法運算符的兩個操作數有一個是浮點數,或者兩個都是浮點數,則計算結果也是浮點數, 這個結果就是自然除法的結果。而且此時允許除數是0,或者0.0,得到結果是正無窮大或負無窮大。
-
%: 求餘運算符。
求餘運算的結果不一定總是整數,它的計算結果是使用第一個操作數除以第二個操作數,得到一個整除的結果後剩下的值就是餘數。由于求餘運算也需要進行除法運算,是以如果求餘 運算的兩個操作數都是整數類型,則求餘運算的第二個操作數不能是0,否則将引發除以零異常。如果 求餘運算的兩個操作數中有一個或者兩個都是浮點數,則允許第二個操作數是0或。.0,隻是求餘運算 的結果是非數:NaN= 0或0.0對零以外的任何數求餘都将得到。
-
++:自加。
該運算符有兩個要點:①自加是單目運算符,隻能操作一個操作數;②自加運算符隻能操作單個數值型(整型、浮點型都行)的變量,不能操作常量或表達式。運算符既可以出現在操作 數的左邊,也可以出現在操作數的右邊。但出現在左邊和右邊的效果是不一樣的。如果把++放在左邊, 則先把操作數加1,然後才把操作數放入表達式中運算;如果把++放在右邊,則先把操作數放入表達式 中運算,然後才把操作數加1。
int a = 5;
//讓a先執行算術運算,然後自加 ,b的值是11
int b = a++ + 6;
int a = 5;
//讓a先自加,然後執行算術運算,b的值是12
int b = ++a + 6;
- - -:自減。也是單目運算符,用法與"基本相似,隻是将操作數的值減1。
Java并沒有提供其他更複雜的運算符,如果需要完成乘方、開方等運算,則可借助于java.lang.Math 類的工具方法完成複雜的數學運算。
指派運算符用于為變量指定變量值,與C類似,Java也使用 =作為指派運算符。通常,使用指派運 算符将一個直接量值賦給變量。
int a=5;
也可使用指派運算符将一個變量的值賦給另一個變量。
int a=5;
int b=a;
Java支援的位運算符有如下7個。
- &: 按位與。
- |: 按位或。
- 〜:按位非。
- ^:按位異或。
- << : 左移運算符。
- >>:右移運算符。
- >>>:無符号右移運算符。
位運算符的基本運算規則 設A = 0011 1100(2) 60(10) B = 0000 1101(2) 13(10)
操作符 | 描述 | 例子 |
& | 如果相對應位都是1,則結果為1,否則為0 | (A&B),得到12,即0000 1100 |
| | 如果相對應位都是 0,則結果為 0,否則為 1 | (A |
^ | 如果相對應位值相同,則結果為0,否則為1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反運算符翻轉操作數的每一位,即0變成1,1變成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移運算符。左操作數按位左移右操作數指定的位數。 | A << 2得到240,即 1111 0000 |
>> | 按位右移運算符。左操作數按位右移右操作數指定的位數。 | A >> 2得到15即 1111 |
>>> | 按位右移補零操作符。左操作數的值按右操作數指定的位數右移,移動得到的空位以零填充。 | A>>>2得到15即0000 1111 |
比較運算符用于判斷兩個變量或常量的大小,比較運算的結果是一個布爾值(true或false),Java 支援的比較運算符如下:
- >:大于,隻支援左右兩邊操作數是數值類型。如果前面變量的值大于後面變量的值,則傳回true。
- >=:大于等于,隻支援左右兩邊操作數是數值類型。如果前面變量的值大于等于後面變量的值, 則傳回true。
- <:小于,隻支援左右兩邊操作數是數值類型。如果前面變量的值小于後面變量的值,則傳回trueo
- <=:小于等于,隻支援左右兩邊操作數是數值類型。如果前面變量的值小于等于後面變量的值, 則傳回true。
-
==/=:等于,如果進行比較的兩個操作數都是數值類型,即使它們的資料類型不相同,隻要它們 的值相等,也都将傳回true——例如97 = 'a’傳回true, 5.0 = 5也傳回true;如果兩個操作數都是引用類型,那麼隻有當兩個引用變量的類型具有父子關系時才可以比較,而且這兩個引用必須指向同一個對象才會傳回true;Java也支援兩個boolean類型的值進行比較,例如,true = false 将傳回false 0
基本類型的變量、值不能和引用類型的變量、值使用==進行比較;boolean類型的變量、值不能與其他任意類型的變量、值使用=進行比較;如果兩個引用類型之間沒有父子繼承關系,那麼它們的變量也不能使用=進行比較.
- !=:不等于,如果進行比較的兩個操作數都是數值類型,無論它們的資料類型是否相同,隻要 它們的值不相等,也都将傳回true;如果兩個操作數都是引用類型,隻要兩個引用指向的不是同一個對象就會傳回true。
- && :與,當且僅當兩個操作數都為真,條件才為真。
- & :不短路與,作用與&&相同,但不會短路。
- | | : 或,如果任何兩個操作數任何一個為真,條件為真。
- |:不短路或,作用與||相同,但不會短路
-
!: 非,用來反轉操作數的邏輯狀态。如果條件為true,則邏輯非運算符将得到false。
對短路邏輯或||而言,如果第一個操作數傳回true, ||将 不再對第二個操作數求值,直接傳回true;不短路與|則兩邊都要判斷。
int a = 5;//定義一個變量;
boolean b = (a>4)||(a++<10);
//使用短路邏輯運算符的結果為5
System.out.println(a);
boolean c = (a>4)&(a++<10);
System.out.println("a的結果為"+a);
boolean c = (a>4)&(a++<10);
//使用不短路邏輯運算符的結果為6
System.out.println("a的結果為"+a);
&與&&的差別與此類似:&總會計算前後兩個操作數,而&&先計算左邊的操作數,如果左邊的操作數為false,則直接傳回false,根本不會計算右邊的操作數。
int a = 5;//定義一個變量;
boolean b = (a<4)&&(a++<10);
//使用短路邏輯運算符的結果為5
System.out.println(b);
//使用不短路邏輯運算符的結果為6
boolean c = (a<4)&(a++<10);
System.out.println("a的結果為"+a);
指派運算符可與算術運算符、位移運算符結合,擴充成功能更加強大的運算符。擴充後的指派運算
- +=:對于x+=y,即對應于x = x + y。
-
-=:對于x -=y>即對應于x = x - yo
*=:對于x *= y,即對應于x = x * yo
- /=:對于x/= y,即對應于x = x/y。
- %=:對于x %= y,即對應于x = x % y。
- &=:對于x&=y,即對應于x = x & y。
- |=:對于x |=y,即對應于x = x|y。
- ^=:對于x A=y,即對應于x = x Ay。
- <<=: 對于x<<=y,即對應于x = x<<y。
- >>=: 對于x>>=y,即對應于x = x >> y。
- >>>=: 對于x»>=y,即對應于x = x >>> y。
三目運算符隻有一個?:,三目運算符的文法格式如下:
variable x = (expression) ? value if true : value if false
int a , b;
a = 10;
// 如果 a 等于 1 成立,則設定 b 為 20,否則為 30
b = (a == 1) ? 20 : 30;
System.out.println( "Value of b is : " + b );
運算符優先級
具有最高優先級的運算符在的表的最上面,最低優先級的在表的底部。
類别 | 關聯性 | |
字尾 | () [] . (點操作符) | 左到右 |
一進制 | + + - !〜 | 從右到左 |
乘性 | * /% | |
加性 | + - | |
移位 | >> >>> << | |
關系 | >> = << = | |
相等 | == != | |
按位與 | ||
按位異或 | ||
按位或 | ||
邏輯與 | && | |
邏輯或 | | | | |
條件 | ?: | |
指派 | = + = - = * = / =%= >> = << =&= ^ = | = | |
逗号 | , |
參考:
【1】:《瘋狂Java講義》
【2】:《Java核心技術 第一卷》
【3】:
https://www.runoob.com/java/java-operators.html