一、算数运算符
1、+运算符
(1)当运算符两边有一个为字符串时,拼接字符串。
public static void main(String[] args) {
System.out.println(1+"2");
}
##输出12
(2)当运算符两边都为数字时,求和。
public static void main(String []args){
System.out.println(1+2);
}
//输出3
2、-运算符
用于求两数的差
public static void main(String []args){
System.out.println(2-1);
}
//输出1
3、*运算符
用于求两数的积
public static void main(String []args){
System.out.println(2*1);
}
//输出2
4、/运算符
(1)当运算符两边有一个为小数时,求商。
public static void main(String []args){
System.out.println(3.0/2);
}
//输出1.5
(2)当运算符两边都为整数时,只要整数部分,并省略掉小数部分。
public static void main(String []args){
System.out.println(3/2);
}
//输出1
5、%运算符
用于求两数相除之后的余数(模)
public static void main(String []args){
System.out.println(3%2);
}
//输出1
6、++运算符
(1)++i:i先自加1,然后做其他运算。
public static void main(String []args){
int i=0;
System.out.println(++i);
}
//输出1
(2)i++:先做其他运算,然后i自加1。
public static void main(String []args){
int i=0;
System.out.println(i++);
System.out.println(i);
}
//输出0
//输出1
7、–运算符
(1)–i:i先自减1,然后做其他运算。
public static void main(String []args){
int i=1;
System.out.println(--i);
}
//输出0
(2)i–:先做其他运算,然后i自减1。
public static void main(String []args){
int i=1;
System.out.println(i--);
System.out.println(i);
}
//输出1
//输出0
二、赋值运算符
1、=运算符
public static void main(String[] args) {
int a=1;
System.out.println(a);
}
//输出1
赋值运算符就是将等于右边的值赋给等于左边的变量。
2、+=运算符
public static void main(String[] args) {
int a=1;
a+=2;
System.out.println(a);
}
//输出3
实际上就是a=a+2;
3、-=运算符
public static void main(String[] args) {
int a=1;
a-=2;
System.out.println(a);
}
//输出-1
实际上就是a=a-2;
4、*=运算符
public static void main(String[] args) {
int a=2;
a*=2;
System.out.println(a);
}
//输出4
实际上就是a=a*2;
5、/=运算符
public static void main(String[] args) {
int a=4;
a/=2;
System.out.println(a);
}
//输出4
实际上就是a=a/2;
5、%=运算符
public static void main(String[] args) {
int a=5;
a%=2;
System.out.println(a);
}
//输出2
实际上就是a=a%2;
三、关系运算符
关系运算符的返回值为boolean
名称 | 作用 |
---|---|
> | 第一个数是否大于第二个数 |
< | 第一个数是否小于第二个数 |
== | 比较基本数据类型时,比较值是否相等,用于比较String时,会比较地址是否相等。 |
>= | 第一个数是否大于等于第二个数 |
<= | 第一个数是否小于等于第二个数 |
!= | 第一个数是否不等于第二个数 |
四、逻辑运算符
1、&&运算符(短路与):&&两边的表达式必须都为true,则结果才会true,否则为false。
public static void main(String []args){
if(1==1&&2==2){
System.out.println(true);
}else {
System.out.println(false);
}
}
//输出true
2、||运算符(短路或):||两边的表达式只要有一个为true,则结果为true,否则为false。
public static void main(String []args){
if(1==1||2==3){
System.out.println(true);
}else {
System.out.println(false);
}
}
//输出true
3、!运算符:结果为true,则为false,结果为false,则为true。
public static void main(String []args){
if(!false){
System.out.println(true);
}else {
System.out.println(false);
}
}
//输出true
4、&&和&的区别
共同点:都是判断两边表达式是否为true才返回true
不同点:&&当左边表达式为false时,不会继续判断右边的表达式,&不管左边表达式是否为false,都会判断右边的表达式。
public static void main(String []args){
int i=1;
if(1==0&&i++==2){
}
System.out.println(i);
}
//输出1
public static void main(String []args){
int i=1;
if(1==0&i++==2){
}
System.out.println(i);
}
//输出2
5、||和|的区别
共同点:都是判断两边表达式是否只要有一个为true就返回true,否则返回false。
不同点:||当左边表达式为true时,不会继续判断右边的表达式,|不管左边表达式是否为false,都会判断右边的表达式。
public static void main(String []args){
int i=1;
if(1==1||i++==2){
}
System.out.println(i);
}
//输出1
public static void main(String []args){
int i=1;
if(1==1|i++==2){
}
System.out.println(i);
}
//输出2
五、三目运算符
格式:表达式?值:值
public static void main(String[] args) {
System.out.println(1>2?1:2);
}
//输出2
所以:三目运算符的效果是当表达式为true时取?后面的值,为false则取:后面的值
六、位运算符
1、&运算符
将两个数转为对应的二进制后,然后对每一位的数进行比较,两个都为1则为1,否则则为0。
示例:2&3
2的二进制:0010
3的二进制:0011
结果是0010
将0010转为10进制之后是2,所以2&3=2;
2、|运算符
将两个数转为对应的二进制后,然后对每一位的数进行比较,有一个为1则为1,否则则为0。
示例:5|7
5的二进制:0101
7的二进制:0111
结果是0111
将0111转为10进制之后是7,所以5|7=7;
3、~运算符
将数转为对应的二进制后,如果位为1, 则为0,为0就为1。
示例:~6
6的二进制:00000000 00000000 00000000 00000110
取反后:11111111 11111111 11111111 11111001
因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。
因此,我们可将这个二进制数的补码进行还原:
(1)首先,末尾减1得反码: 11111111 11111111 11111111 11111010
(2)其次,将各位取反得原码:00000000 00000000 00000000 00100101
(3)此时二进制转原码为-7
(4)所以~6 = -7
快速运算:+1取反
4、^运算符
将数转为对应的二进制后,如果位相同则为0,不同为1
示例:2^3
2的二进制:0010
3的二进制:0011
结果0001
将0001转为10进制之后是1,所以2^3=1;
七、位移运算符
1、<<运算符(带符号左移)
将数字先转为二进制,然后将数字左移,<<左边的数是值,右边的是要移动的位数。
示例:2<<2
2的二进制:0010
将1向左移动两位是1000,转为十进制是8,所以2<<2是8
快速运算:2*2的平方
2、>>运算符(带符号右移)
将数字先转为二进制,然后将数字右移,>>左边的数是值,右边的是要移动的位数。
示例:8>>2
8的二进制:1000
将1向右移动两位是0010,转为十进制是2,所以8>>2是2
快速运算:8/2的平方
3、>>>运算符(无符号右移)
计算正数时和>>作用相同,计算负数时则是会去掉符号
示例:-8>>>2
-8的二进制原码是10000000 00000000 00000000 00001000
-8的二进制反码是11111111 11111111 11111111 11110111
-8的二进制补码为11111111 11111111 11111111 11111000
右移两位之后为00111111 11111111 11111111 11111110
转为十进制结果为1073741822,所以-8>>>2等于1073741822
八、运算符优先级
先计算()、.、{}、;和,然后
- ++、-- 、~ 、!
- *、/、%
- +、-
- <<、>>、>>>
- <、>、<=、>=、instanceof
- ==、!=
- &
- ^
- |
- &&
- ||
- ?:(三目运算符)
- =、*=、/=、%=
- +=、-=、