JavaSE—运算符

运算符

Java支持的运算符如下:

1.算数运算符

简单的+,-,*,/,%(模运算,取余数)和数学中的意义是一样的

public class OperatorDemo {
    public static void main(String[] args) {
        
        int num1 = 10;
        int num2 = 20;
        
        int add = num1 + num2;
        int sub = num1 - num2;
        int mul = num1 * num2;
        //运算时数据类型如果不一样,向参与运算的操作数的类型中的最高精度转型 
        double exc = (double)num1 / num2;
        
        //模运算,结果为num2除以num1的余数
        int mod = num2 % num1;

        System.out.println(add);
        System.out.println(sub);
        System.out.println(mul);
        System.out.println(exc);
        System.out.println(mod);
    }
}

+ 扩展:若操作数中有字符串的话,即为字符串的拼接(从遇到的第一个字符串之后的所有数据类型都为字符串拼接)

System.out.println(10+20+"hello");
System.out.println("hello"+10+20);

虽然操作数都是一样的,但是二者的结果是不一致的,第一个的10+20还没有碰到字符串,会当作是整数运算为30,再拼接字符串为30hello,但是第一个一开始就遇到了字符串,所以后续的所有都会当作字符串拼接,所以结果为hello1020。

++(自增),--(自减)

++和--都有两种实现方式

前自增:++number

后自增:number++

(自减相同)

public class SelfIncreasing {
    
    public static void main(String[] args) {

        int a = 1;
        int b = a++;

        System.out.println("a = "+a);
        System.out.println("b = "+b);

        int a1 = 1;
        int b1 = ++a1;

        System.out.println("a1 = "+a1);
        System.out.println("b1 = "+b1);
    }
}

前后有什么区别呢?

我们可以从结果中看出,a和a1都变为了2,即操作数不管是前自增还是后自增,结果都会让自己+1

而b=1,b1=2,即说明了后自增a++会先把未自增的操作数的值先赋值,再进行自增操作;

而前自增++a会先进行自增操作,再把操作后的数进行赋值。

(自减同自增)。

2.逻辑运算符

&&:逻辑与,只有两个操作数都为true,结果才为true

||:逻辑或,只有两个操作数都为false,结果才为false(只要有一个为true,则结果为true)

!:非,!true的结果为false,!false的结果为true


按位操作:对二进制数据进行逐位运算

&:按位与,两个为1,结果才为1

|:按位或,两个为0,结果才为0(只要1有一个为1,结果为1)

^:按位亦或,相同数字得0,不同数字为1

~:按位非,1的结果则为0,0的结果则为1

左移 <<:左移多少位就乘以多少个2(但是会有溢出)

右移>>:右移多少位就除以多少个2(也会有溢出)

&&、||、!

public class LogicalOperators {

    public static void main(String[] args) {

        boolean b1 = true;
        boolean b2 = false;

        System.out.println("b1 && b2 = "+(b1 && b2));//false
        System.out.println("b1 || b2 = "+(b1 || b2));//true
        System.out.println("!(b1 && b2) = "+(!(b1 && b2)));//true
    }
}

注意:&&和||都是短路的。&&运算中,只要第一个结果为false,则不再看第二个操作数,直接返回结果;||运算中,只要第一个结果为true,也不再看第二个操作数,直接返回结果。

 int num = 1;
 System.out.println(false && (num++>0));
 System.out.println(num);//由于第一个为false,就不会看第二个了,也就不会执行num++了,所以num=1
 System.out.println(true && (num++>0));
 System.out.println(num);//由于第一个为true,所以也会看第二个操作数,所以num++被执行,所以num+2

 int num1 = 1;
 System.out.println(true || (num1++>1));
 System.out.println(num1);//由于第一个为true,就不会看第二个了,也就不会执行num++了,所以num=1
 System.out.println(false || (num1++>0));
 System.out.println(num1);//由于第一个为false,所以也会看第二个操作数,所以num++被执行,所以num+2

&、|、^、~

1的二进制:01

2的二进制:10

所以

1&2 = 00(0)

​ 1|2 = 11(3)

​ 1^2 = 11(3)

​ ~1 = 10(-2)这里涉及到了有符号整数取反的计算问题(无计算机组成原理的人可以自行查阅资料,不懂也无需纠结~)

​ 1<<2 = 10(1*2=2)

​ 2>>1 = 01 (2/2=1)

~1为什么结果为-2:

1的源码为 00000000 00000000 00000000 00000001
1的取反为 11111111 11111111 11111111 11111110

减一后得到反码为 11111111 11111111 11111111 11111101
取反后得到源码为 10000000 00000000 00000000 00000010

第一位为符号位,1代表负数,所以结果为-2。

3.赋值运算符

在Java中,=表示赋值,把右边的值赋给左边的变量

+=、-=、*=、/=等都是用于简便书写的

a+=b:表示为a=a+b;其余同理

int a = 10;
int b = 20;
a += b;//即a = a + b;
System.out.println(a);//输出结果为30

4.关系运算符

==表示相等,>=大于等于,<=小于等于

运算结果为true或者false

System.out.println(1==2);//false
System.out.println(1>=2);//false
System.out.println(1<=2);//true

5.三目运算符

a?b:c

如果a为true的话,则结果为b

如果a为false的话,则结果为c

a不仅仅可以是true或者false两个值,也可以是关系运算符连接的表达式(表达式即为合法使用运算符连接的式子)

System.out.println(true?"1":"2");
System.out.println(false?"1":"2");
System.out.println(1>2?"1":"2");


不必强制性的去记住Java的每一个运算符,只要在需要的时候想起来会用就好了~

posted @ 2021-01-12 15:29  deng-hui  阅读(99)  评论(0编辑  收藏  举报