目录
一、算数运算符
(一)、基本四则运算符:
1、加法、减法、乘法运算符
加法运算符:+
减法运算符:-
乘法运算符:*
注意:
- 当两个类型不一致的数字进行运算时,范围小的会自动提升为范围大的进行运算,例如:1+1.1=2.1,1首先会提升为double型数据再参与运算。
- 这三类都是二元运算符,正常使用即可。
2、除法运算符
除法运算符:/
注意:
- 若/运算符的两端都是整数,则运算结果为整数,例如:1/2=0。
- 若/运算符只要有一端为浮点数运算符,则运算结果为浮点数,例如:1.0/2=0.5,1/2.0=0.5,1.0/2.0=0.5。
- 运算符的右端不能为0,即不能对0做/运算。
3、取模运算符
取模运算符:%
注意:
- %运算结果的正负只与%左端的数有关,例如:10%3=1,-10%3=-1,10%-3=1。
- %运算可以有浮点数参与,例如:12.8%5=2.8。
- %运算符的右端不能为0,即不能对0进行取模运算。
(二)、算数运算符
算术运算符有:+=,-=,*=,/=,%=
例如:a*=12+9 ->a=a*(12+9)
注意:
- 这一类运算符的左端必须是变量,然后将运算结果赋值给左边的变量。
- 当运算符的右端不仅仅只有一个常量时,尽量给右端整体加上括号,以免出错。
(三)、自增、自减运算符
自增运算符:++a(前置自增),a++(后置自增)
自减运算符:--a(前置自减),a--(后置自减)
这类运算符的结果都是先将变量进行加1或者减1,然后再将运算结果赋值给该变量。
那么前置自增和后置自增到底有什么区别?
public static void main(String[] args) {
int a=1;
int b=a++;
System.out.println(a);
System.out.println(b);
}
运行结果:
public static void main(String[] args) {
int a=1;
int b=++a;
System.out.println(a);
System.out.println(b);
}
运行结果:
这两个的区别主要是参与表达式运算时,前置自增是先进行加一运算,在进行相关表达式的计算,但是后置自增,是先进行相关表达式计算,再进行加一运算,前置和后置对于自增运算变量本身并没有较大区别,但是对于其所参与的表达式的值有影响。
所以,对于上述例子,第一段代码是先对b进行赋值运算,再自增,故a=1,b=2;但是在第二段代码中,是先对a进行自增运算,此时a的值为2,再进行赋值,故b的值为2。
二、关系运算符
关系运算符包含有:
==、!=、>、>=、<、<=
注意:
- ==和=的区别:==是判断左右两端是否相等,=是将右端赋值给左边变量。
- 不能在一个表达式中连着使用关系运算符,例如:a>2>b,这是不允许的。
通俗来说,关系运算符主要功能时进行判断。
三、逻辑运算符
(一)、逻辑与
逻辑与:&&
注意:
- &&要求两端的布尔表达式的值都为true时,结果才为true,否则为false。
- &&遵守短路求值规则,即当左边的布尔表达式的值为false时,便不会再对右边的布尔表达式进行计算,其结果直接为false。
public static void main(String[] args) {
int a=0;
int b=1;
System.out.println((a==b)&&(a==(a++)));
System.out.println(a);
}
运行结果:
分析:由于a==b的值为false,&&便不会执行后面的代码,所以a=1。
public static void main(String[] args) {
int a=1;
int b=1;
System.out.println((a==b)&&(a==(a++)));
System.out.println(a);
}
运行结果:
分析:由于a==b的值为true,&&便会执行后面的代码,所以a=2。
(二)、逻辑或
逻辑或:||
注意:
- ||要求只要两端只要有一端的布尔表达式结果为true,其结果便为true。
- ||同样遵守短路逻辑运算,只要||的左端布尔表达式为true,代码便不会执行右边,||的运算结果为true。
由于||与&&类似,便不再进行赘述。
(三)、逻辑非
逻辑非:!
注意:
- !是对布尔表达式的结果取非,例如:!(true)的结果为false。
- !的右端必须是布尔表达式,如下操作是不允许的:
四、位运算符
由于在计算机中利用二进制存储数据信息,八位二进制为一个字节,在进行位运算时,首先需要将要运算的数字转换为二进制数,再进行运算。
(一)、按位与
按位与:&
public static void main(String[] args) {
int a=3;
int b=5;
System.out.println(a&b);
}
运行结果:
解析:
&的两端可以是布尔表达式,但是它并不遵守短路运算,&两端的布尔表达式都会执行 ,同样要求只有&两端布尔表达式都为true时,结果才是true。
(二)、按位或
按位或:|
public static void main(String[] args) {
int a=3;
int b=5;
System.out.println(a|b);
}
运行结果:
解析:
|的两端可以是布尔表达式,但是它并不遵守短路运算,| 两端的布尔表达式都会执行 ,同样要求只有|只要有一端布尔表达式为true时,结果是true。
(三)、按位取反
按位取反:~
public static void main(String[] args) {
int a=3;
System.out.println(~a);
}
运行结果:
解析:
(四)、按位异或
按位异或:^
^运算的规则是相同为0,不同为1。
public static void main(String[] args) {
int a=3;
int b=5;
System.out.println(a^b);
}
运算结果:
解析:
五、移位运算符
(一)、左移运算符
左移运算符:<<
运算规则:向左移位,右侧补0。
public static void main(String[] args) {
int a=3;
System.out.println(a<<1);
}
运行结果:
解析:
(二)、右移运算符
右移运算符:>>
运算规则:向右移位,左侧补符号位
public static void main(String[] args) {
int a=3;
System.out.println(a>>1);
}
运行结果:
解析:
(三)、无符号右移
无符号右移:>>>
运算规则:向右移位,左侧补0
注意:没有无符号左移
六、条件运算符
条件运算符:
表达式1?表达式2:表达式3
运算规则:
- 若表达式1的值为true,则执行表达式2;
- 若表达式1的值为false,则执行表达式3;
要求:表达式2和表达式3必须为同类型表达式,除非能发生隐式转换,还有条件运算符要有计算结果。
例题解析:
public static void main(String[] args) {
int a=10;
int b=21;
int c=a<b?a>9?11:b:a;
System.out.println(c);
}
运行结果: 11
这个题目首先判断a<b满足,然后进入蓝色部分,再进行a>9的判断,满足则c=11。