Java运算符
计算机中最基本的用途之一就是执行数学运算
- 算数运算符
算数运算符用在数学表达式中,它的作用和在数学中的作用一样
+ 加法 - 相加运算符,用于将两侧的值进行加法运算
- 减法 - 减法运算符,用于将左侧的值减去右侧的值的减法运算
* 乘法 - 相乘运算符,用于将两侧的值进行乘法运算
/ 除法 - 除法运算符,用于将左侧的值除以右侧的值的除法运算
++ - 自增运算符,操作数增加1
-- - 自减运算符,操作数减少1
% 取模运算符,用于将左侧的值除以右侧得值获取余数结果
- 关系运算符
== 检查如果两个操作值是否相等,如果相等则返回true否则返回false
!= 检查如果两个操作值是否相等,如果相等返回false否则返回true
> 检查左侧操作值是否大于右侧操作值,如果大于返回true否则返回false
< 检查左侧操作值是否小于右侧操作值,如果小于返回true否则返回false
>= 检查左侧操作值是否大于或等于右侧操作值,如果大于或等于返回true否则返回false
<= 检查左侧操作值是否小于或等于右侧操作值,如果小于或等于返回true否则返回false
- 位运算符
位运算符应用与int、long、short、char、byte等类型。
位运算符的作用在所有的位上,并按位运算,设 a = 60,b = 13,它们的二进制格式表示如下
a = 0011 1100
b = 0000 1101
--------------------------
a & b = 0011 1100 & 0000 1101 = 0000 1100 = 12
按位与操作符,当且仅当两个操作值的某一位都非0时,结果的该位才为1
a | b = 0011 1100 | 0000 1101 = 0011 1101 = 61
按位或操作符,只要两个操作值的某一位有一个非0时,结果的该位就为1
a ^ b = 0011 1100 ^ 0000 1101 = 0011 0001 = 49
按位异或操作符,两个操作值的某一位不想同时,结果的该位久违1
~a = ~ 0000 1101 = 1100 0011 = -61
按位补运算符翻转操作数的每一位
a << b = 0011 1100 << 0000 1101 = 1111 0000 = 240
按位左移运算符,左侧操作值按左位移右侧操作值的指定位数
a >> b = 0011 1100 >> 0000 1101 = 1111 = 15
按位右移运算符,左侧操作值按右位移右侧操作值的指定位数
a >>> b = 0011 1100 >>> 0000 1101 = 0000 1111 = 15
按位右移补零操作符,左侧操作值按右侧操作值的指定位数右移,移动得到的空位以零填充
- 逻辑运算符
&& 逻辑与运算符,当两侧的操作值都为true时条件为true 否则返回false
|| 逻辑或运算符,当两侧的操作值只要存在一个为true就返回true 如果两侧全为false时返回false
! 逻辑非运算符,用来反转操作值的逻辑状态,如条件为true时返回false,否则返回ture
- 赋值运算符
= 简单的赋值运算符,将右侧操作值赋值给左侧操作值 例: a = 1
+= 加和赋值操作符,它把左侧操作值与右侧操作值进行相加运算并赋值给左侧操作值, 例: a += 1 结果为: a = a + 1
-= 减和赋值操作符,它把左侧操作值和右侧操作值相减后赋值给左侧操作值。与加和赋值操作符类似
*= 乘和赋值操作符
/= 除和赋值操作符
(%)= 取模和赋值操作符
<<= 左位移赋值运算符
>>= 右位移赋值运算符
&= 按位与赋值运算符
^= 按位异或赋值操作符
|= 按位或赋值操作符
- 其他运算符
instanceOf 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)
instanceOf运算符的使用格式如下:
(Object reference variable) instanceOf (class/interface type)
# 例:
String a = "test";
boolean result = name instanceOf String;
System.out.println(result);
-----------------------------控制台-------------------------------
true
-----------------------------------------------------------------
# 例2:
class Test{}
public class TestIn extends Test {
public static void main(String ... args) {
Test t = new TestIn();
boolean result = t instanceOf TestIn;
System.out.println(result);
}
}
-----------------------------控制台-------------------------------
true
也就是说instanceOf运算符左侧变量所指的对象如果是右侧类或接口等的子类则同样会返回true
Java运算符优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。
再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。