一、算术运算符
+、-、*、/、%、++、- -
a++ 与 ++a 的区别:
a++:变量a先参与程序的执行,然后变量a自加1
++a:变量a自加1,再参与程序的执行
int a = 5;
int b = 5;
System.out.println("a:"+(a++)+", b:"+(++b));
System.out.println("a:"+a+", b:"+b);
a:5, b:6
a:6, b:6
二、比较运算符
>、<、>=、<=、==、!=
返回值为布尔类型
int a = 5;
int b = 5;
System.out.println(a == b);
System.out.println(a > b);
true
false
三、逻辑运算符
&&、||、!
操作符 | 描述 |
---|---|
&& | 逻辑与运算符。当且仅当两边表达式都为真,条件才为真。 |
|| | 逻辑或操作符。两边任何一个为真,条件为真。 |
! | 逻辑非运算符 |
短路运算
表达式1 && 表达式2 : 如果表达式1为false,根据&&的规则,已经可以判断出整个表达式的结果,就不会继续判断表达式2;
表达式1 || 表达式2 : 如果表达式1为true,根据||的规则,已经可以判断出整个表达式的结果,就不会继续判断表达式2
问:以下程序的输出结果?
public static void main(String[] args) {
if(tar(true)&&tar(false)) {
}
}
static boolean tar(boolean b) {
System.out.println(b);
return b;
}
true
false
public static void main(String[] args) {
if(tar(false)&&tar(true)) {
}
}
static boolean tar(boolean b) {
System.out.println(b);
return b;
}
false
四、赋值运算符
+=、-=、*=、/=、%=、=
五、位运算符
操作符 | 描述 |
---|---|
& | 与,如果对应位都是1,则结果为1,否则为0 |
| | 或,如果对应位都是0,则结果为0,否则为1 |
^ | 异或,如果对应位的值相同,则结果为0,否则为1 |
~ | 非,按位取反运算符,二进制补码按位取反(包括符号位),即0变成1,1变成0 |
<< | 按位左移运算符,符号位不变,二进制补码按位左移,低位补0 |
>> | 按位右移运算符,符号位不变,二进制补码按位右移,低位舍弃 |
>>> | 按位无符号右移,低位舍弃,高位补0 |
注:不管是正数还是负数,在计算机中全部存储的是补码。
正数:原码=反码=补码,高位全部补0
负数:反码=符号位不变,原码取反;补码=反码+1,高位全部补1
~2=-3
~-2=1
9<<2=36
-9<<2=-36
9>>2=2
-9>>2=-3
-5>>>2=62
-9>>>2=61
问:“&”与“&&”的区别?
&是位运算符, 表示与运算。如果对应位都是1,则结果为1,否则为0
&&是逻辑运算符,表示逻辑与运算符。当且仅当两边表达式都为真,条件才为真。
六、三元运算符
?:
该运算符主要是决定哪个值应该赋值给变量。
(expression) ? value if true : value if false
public static void main(String[] args) {
int a = 1;
int b = 2;
String c = (a > b) ? "yes" : "no";
System.out.println(c);
}
no
七、运算符优先级
运算符优先级,从左到右越来越低:
() ++ - - !
~ instanceof * / % + -
<< >> >>>
< > <= >= == !=
& ^ && || ?:
注:如果不确定运算符的优先级,可以使用小括号将需要先计算的代码括起来
已知a=1,计算:
(1) a+++1=2
(2) ++a+1=3
(3) a++-++a=-2
(4) a+++++a=4
(5) a+-a=0