Java中运算符分为以下几类:
- 算数运算符(+ - * / % ++ --)
- 关系运算符(== != > < >= <=)
- 位运算符 (& | ^ ~ << >> >>>)
- 逻辑运算符(&& || ! & |)
- 赋值运算符(= += -= *= /= (%)= <<= >>= &= ^= |=)
- 其他运算符(三元运算符,instanceof运算符)
算数运算符
+:运算符两侧数相加,如果一个数加一个字符串会进行字符串拼接。
-:运算符左侧数减去右侧数。
*:运算符两侧数相乘。
/:运算符左侧数除以右侧数。
%:运算符左侧数除以右侧数的余数。
++:操作数的值加1
–:操作数的值减1
前缀后缀自增自减
1、前缀自增自减(++x,–x):先进行自增或者自减运算,在进行表达式运算。
2、后缀自增自减(x++,x–):先进行表达式运算,在进行自增或者自减运算
代码实例:
public class Operator {
public static void main(String[] args) {
int x = 1; //定义一个值 (1)
System.out.println(++x); //前缀自增 (2)
System.out.println(x++); //后缀自增 (3)
System.out.println(--x); //前缀自减 (4)
System.out.println(x--); //后缀自减 (5)
System.out.println(x); //最后输出x的值 (6)
}
}
运行结果为:
2
2
2
2
1
分析运行过程:
(1):定义int类型x,赋值 1。
(2):前缀自增先做自增运算,x就等于2,然后打印2。
(3):后缀自增先进行表达式运算,先执行打印,然后在做自增运算,x就等于3。
(4):前缀自减先做自减运算,x就等于2,然后打印2。
(5):后缀自减先进行表达式运算,先执行打印,然后在做自减运算,x就等于1。
(6):最后x等于1,打印1。
关系运算符
==:运算符两边值相等,则条件为真。
!=:运算符两边值不相等,则条件为真
> :运算符左侧值大于右侧值,则条件为真
<:运算符左侧值小于右侧值,则条件为真
>=:运算符左侧值大于等于右侧值,则条件为真
<=:运算符左侧值小于等于右侧值,则条件为真
位运算符
Java定义了位运算符,是按照二进制位来计算的,应用于整数型(byte,short,int,long)和字符型(char)。
&:与。如果相对应的位都是1,则结果为1,否则为0。
|:或。如果相对应的位都是0,则结果为0,否则为1。
^:异或。如果相对应位值相同,则结果为0,否则为1。
~:非。位上的值取反,如果是0则为1,如果是1则为0。
<<:左移。运算符左侧为运算的值,右侧为向左移动的位数。
>>:带符号右移。运算符左侧为运算的值,右侧为向右移动的位数。
>>>:无符号右移。运算符左侧为运算的值,右侧为向右移的位数,移动得到的空位以零填充。
代码实例:
public class Operator {
public static void main(String[] args) {
byte a = 1; //0000 0001
byte b = 9; //0000 1001
System.out.println("&:" + (a & b)); //1 = 0000 0001
System.out.println("|:" + (a | b)); //9 = 0000 1001
System.out.println("^:" + (a ^ b)); //8 = 0000 1000
System.out.println("~:" + (~a)); //-2 = 1111 1110
System.out.println("<<:" + (b << a)); //18 = 0001 0010
System.out.println(">>:" + (b >> a)); //4 = 0100
System.out.println(">>>:" + (b >>> a)); //4 = 0000 0100
}
}
运行结果为:
&:1
|:9
^:8
~:-2
<<:18
>>:4
>>>:4
>>与>>>运算符的区别
>> :带符号右移(相当于除以2)。正数右移高位补0,负数右移高位补1。
>>>:无符号右移。无论正数还是负数,高位都补0。
逻辑运算符
&&:逻辑与。运算符两边都为真,条件为真。
||:逻辑或。运算符两边任何一个为真,条件为真。
!:逻辑非。反转条件结果,如果条件为真,则结果为假,如果条件为假,则结果为真。
&,|:如果运用在逻辑运算中,则为逻辑运算符。如果运用在算数运算中,则为位运算符。
&&与&,||与|区别
赋值运算符
=(赋值):运算符右侧值赋值给左侧值。
+=:加赋值。
-=:减赋值。
*=:乘赋值。
/=:除赋值。
%=:模赋值。
<<=:左移赋值。
>>=:右移赋值。
&:与赋值。
^=:异或赋值。
|=:或赋值。
代码实例:
public class Operator {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 0;
c = a + b;
System.out.println("c = a + b = " + c );
c += a ;
System.out.println("c += a = " + c );
c -= a ;
System.out.println("c -= a = " + c );
c *= a ;
System.out.println("c *= a = " + c );
a = 10;
c = 15;
c /= a ;
System.out.println("c /= a = " + c );
a = 10;
c = 15;
c %= a ;
System.out.println("c %= a = " + c );
c <<= 2 ;
System.out.println("c <<= 2 = " + c );
c >>= 2 ;
System.out.println("c >>= 2 = " + c );
c >>= 2 ;
System.out.println("c >>= 2 = " + c );
c &= a ;
System.out.println("c &= a = " + c );
c ^= a ;
System.out.println("c ^= a = " + c );
c |= a ;
System.out.println("c |= a = " + c );
}
}
运行结果为:
c = a + b = 30
c += a = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a = 0
c ^= a = 10
c |= a = 10
三元运算符
该运算符用作条件判断,有3个操作数,并且需要判断布尔表达式的值,主要是决定哪个值应该赋值给变量。
语法格式:variable x = (condition) ? value1 : value2;
如果condition为true,则表达式值为value1,否则为value2。
代码实例:
public class Operator {
public static void main(String[] args) {
int n = 0;
System.out.println(n == 0 ? 1 : 2);
System.out.println(n != 0 ? 1 : 2);
}
}
运行结果为:
1
2
instanceof 运算符
该运算符用于操作对象实例,检查对象是否是一个特定类型(类或接口)。
语法格式:(Object o) instanceof (class/interface type) ;
代码实例:
public class Operator {
public static void main(String[] args) {
Operator operator = new Operator();
System.out.println(operator instanceof Operator);
}
}
运行结果如下:
true
Java运算符优先级
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr– | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
面试常问
1、前缀后缀自增自减笔试题。
2、+=/-=笔试题。
3、&&与&,||与|的区别。
4、>>与>>>区别。
——THE END——