Java的運算子可分為4類:算術運算子、關係運算子、邏輯運算子和位元運算子。
算術運算子
#Java的算術運算子分為一元運算子和二元運算子。一元運算子只有一個運算元;二元運算子有兩個運算元,運算子位於兩個運算元之間。算術運算子的操作數必須是數值類型。
1、一元運算子:
一元運算子有:正( )、負(-)、加1( )和減1(-)4個。
加1、減1運算子只允許用於數值類型的變量,不允許用於表達式中。加1、減1運算子既可放在變數之前(如++i),也可放在變數之後(如i++),兩者的差異是:如果放在變數之前(如++i),則變數值先加1或減1,然後進行其他對應的操作(主要是賦值操作);如果放在變數之後(如i++),則先進行其他對應的操作,然後再進行變數值加1或減1。
例如:
int i=6,j,k,m,n; j = +i;//取原值,即j=6 k = -i;//取负值,即k=-6 m = i++;//先m=i,再i=i+1,即m=6,i=7 m = ++i;//先i=i+1,再m=i,即i=7,m=7 n = j--;//先n=j,再j=j-1,即n=6,j=5 n = --j;//先j=j-1,再n=j,即j=5,n=5
在書寫時也要注意的是:一元運算子與其前後的運算元之間不允許有空格,否則編譯時會出錯。
2、二元運算子
二元運算子有:加( )、減(-)、乘(*)、除(/)、取餘(%)。其中 、-、*、/完成加、減、乘、除四則運算,%是求兩個運算元相除後的餘數。
%求餘運算範例:
a % b = a - (a / b) * b
取餘運算子既可用於兩個運算元都是整數的情況,也可用於兩個運算元都是浮點數(或一個操作數是浮點數)的情況。當兩個運算元都是浮點數時,例如7.6 % 2.9時,計算結果為:7.6 - 2 * 2.9 = 1.8。
當兩個運算元都是int型別數時,a%b的計算公式為:
a % b = a - (int)(a / b) * b
當兩個運算元都是long型別(或其他整數型別)數時,a%b的計算公式可以類推。
當參加二元運算的兩個運算元的資料類型不同時,所得結果的資料類型與精確度較高(或位數較長)的那種資料型別一致。
例如:
7 / 3 //整除,運算結果為2
7.0 / 3 //除法,運算結果為2.33333,即結果與精確度較高的型別一致
7 % 3 //取餘,運算結果為1
7.0 % 3 //取餘,運算結果為1.0
-7 % 3 //取餘,運算結果為-1,即運算結果的符號與左操作數相同
7 % -3 //取餘,運算結果為1,即運算結果的符號與左操作數相同
關係運算子
關係運算子用於比較兩個數值之間的大小,其運算結果為一個邏輯類型的數值。關係運算子有六個:等於(==)、不等於(!=)、大於(>)、大於等於(>=)、小於(<)、小於等於(<=)。
例如:
9 <= 8 //運算結果為false
9.9 >= 8.8 //運算結果為true
'A' < 'a' //運算結果為true,因字元'A'的Unicode編碼值小於字元'a'的
要說明的是,對於大於等於(或小於等於)關係運算子來說,只有大於和等於兩種關係運算都不成立時其結果值才為false,只要有一種(大於或等於)關係運算成立其結果值即為true。例如,對於9 <= 8,9既不小於8也不等於8,所以9 <= 8 的運算結果為false。對於9 >= 9,因9等於9,所以9 >= 9的運算結果為true。
邏輯運算子
#邏輯運算子要求運算元的資料型別為邏輯型,其運算結果也是邏輯型值。邏輯運算子有:邏輯與(&&)、邏輯或(||)、邏輯非(!)、邏輯異或(^)、邏輯與(&)、邏輯或(|)。
真值表是表示邏輯運算功能的一種直覺方法,其具體方法是把邏輯運算的所有可能值用表格形式全部羅列出來。 Java語言邏輯運算子的真值表如下:
邏輯運算子的真值表
A B A&&B A||B !A A^BA&BA|B
false false false false true false false false
true false false true false true false true
true false false true true
前两列是参与逻辑运算的两个逻辑变量,共有4种可能,所以表2.5共有4行。后6列分别是6个逻辑运算符在逻辑变量A和逻辑变量B取不同数值时的运算结果值。
要说明的是,两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。其区别是:&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。
例如,有如下逻辑表达式:
(i>=1) && (i<=100)
此时,若i等于0,则系统判断出i>=1的计算结果为false后,系统马上得出该逻辑表达式的最终计算结果为false,因此,系统不继续判断i<=100的值。短路计算功能可以提高程序的运行速度。
建议读者:在程序设计时使用&&和||运算符,不使用&和|运算符。
用逻辑与(&&)、逻辑或(||)和逻辑非(!)可以组合出各种可能的逻辑表达式。逻辑表达式主要用在 if、while等语句的条件组合上。
例如:
int i = 1; while(i>=1) && (i<=100) i++;//循环过程
上述程序段的循环过程将i++语句循环执行100次。
位运算符
位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
位运算符共有7个,分别是:位与(&)、位或(|)、位非(~)、位异或(^)、右移(>>)、左移(<<)、0填充的右移(>>>)。
位运算的位与(&)、位或(|)、位非(~)、位异或(^)与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值。
位运算示例
运算符 名称 示例说明
& 位与x&y 把x和y按位求与
| 位或x|y 把x和y按位求或
~ 位非~x 把x按位求非
^ 位异或 x^y 把x和y按位求异或
>> 右移x>>y把x的各位右移y位
<< 左移x<
>>> 右移x>>>y 把x的各位右移y位,左边填0
举例说明:
1、有如下程序段:
int x = 64; //x等于二进制数的01000000 int y = 70; //y等于二进制数的01000110 int z = x&y //z等于二进制数的01000000
即运算结果为z等于二进制数01000000。位或、位非、位异或的运算方法类同。
2、右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。例如,对于如下程序段:
int x = 70; //x等于二进制数的01000110 int y = 2; int z = x>>y //z等于二进制数的00010001
即运算结果为z等于二进制数00010001,即z等于十进制数17。
对于如下程序段:
int x = -70; //x等于二进制数的11000110 int y = 2; int z = x>>y //z等于二进制数的11101110
即运算结果为z等于二进制数11101110,即z等于十进制数-18。要透彻理解右移和左移操作,读者需要掌握整数机器数的补码表示法。
3、0填充的右移(>>>)是不论被移动数是正数还是负数,左边移进的部分一律补0。
其他运算符
1、赋值运算符与其他运算符的简捷使用方式
赋值运算符可以与二元算术运算符、逻辑运算符和位运算符组合成简捷运算符,从而可以简化一些常用表达式的书写。
赋值运算符与其他运算符的简捷使用方式
运算符 用法 等价于说明
+= s+=is=s+i s,i是数值型
-= s-=is=s-i s,i是数值型
*= s*=is=s*i s,i是数值型
/= s/=is=s/i s,i是数值型
%= s%=is=s%i s,i是数值型
&= a&=ba=a&b a,b是逻辑型或整型
|= a|=ba=a|b a,b是逻辑型或整型
^= A^=ba=a^b a,b是逻辑型或整型
<<=s<<=i s=s<
>>=s>>=i s=s>>is,i是整型
>>>= s>>>=i s=s>>>i s,i是整型
2、方括号[]和圆括号()运算符
方括号[]是数组运算符,方括号[]中的数值是数组的下标,整个表达式就代表数组中该下标所在位置的元素值。
圆括号()运算符用于改变表达式中运算符的优先级。
3、字符串加(+)运算符
当操作数是字符串时,加(+)运算符用来合并两个字符串;当加(+)运算符的一边是字符串,另一边是数值时,机器将自动将数值转换为字符串,这种情况在输出语句中很常见。如对于如下程序段:
int max = 100; System.out.println("max = "+max);
计算机屏幕的输出结果为:max = 100,即此时是把变量max中的整数值100转换成字符串100输出的。
4、条件运算符(?:)
条件运算符(?:)的语法形式为:
<表达式1> ?<表达式2> : <表达式3>
条件运算符的运算方法是:先计算 <表达式1> 的值,当 <表达式1> 的值为true时,则将 <表达式2> 的值作为整个表达式的值;当 <表达式1> 的值为false时,则将 <表达式3> 的值作为整个表达式的值。如: 表达式3> 表达式1> 表达式2> 表达式1> 表达式1>
int a=1,b=2,max; max = a>b?a:b; //max等于2
5、强制类型转换符
强制类型转换符能将一个表达式的类型强制转换为某一指定数据类型,其语法形式为:
(<类型>)<表达式>
6、对象运算符instanceof
对象运算符instanceof用来测试一个指定对象是否是指定类(或它的子类)的实例,若是则返回true,否则返回false。
7、点运算符
点运算符“.”的功能有两个:一是引用类中成员,二是指示包的层次等级。
运算符的优先级
以下按优先级从高到低的次序列出Java语言中的所有运算符,表中结合性一列中的“左右”表示其运算次序为从左向右,“右左”表示其运算次序为从右向左。
优先级 运算符 结合性
1 . [] () ; ,
2 ++ ―― += ! ~ +(一元) -(一元) 右左
3 * / % 左右
4 +(二元) -(二元) 左右
5 << >> >>> 左右
6 < > <= >= instanceof 左右
7 = = != 左右
8 &左右
9 ^左右
10 |左右
11 && 左右
12 || 左右
13 ?: 右左
14 = *= /= %= += -= <<= >>= >>>= &= ^= |= 右左
推荐学习:Java视频教程
以上是java的運算子有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!