java运算符详解

一、算数运算符

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

八、运算符优先级

先计算()、.、{}、;和,然后

  1. ++、-- 、~ 、!
  2. *、/、%
  3. +、-
  4. <<、>>、>>>
  5. <、>、<=、>=、instanceof
  6. ==、!=
  7. &
  8. ^
  9. |
  10. &&
  11. ||
  12. ?:(三目运算符)
  13. =、*=、/=、%=
  14. +=、-=、

你可能感兴趣的:(Java,java)