个人技术分享

引言:

哈喽,各位小伙伴们大家好呀,今天这篇博客给大家详细介绍一下Java中的运算符知识,这是一篇比较详细的运算符大全,让我们一起来学习吧!

1.什么是运算符

计算机的最基本的用途之一就是执行数学运算,比如:

        int a=10;
        int b=20;
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/b);
        System.out.println(a%b);

上述的"+","-","*","/"等就是运算符,即对操作数进行操作时的符号,不同运算符操作的含义不同。

作为一门计算机语言,Java也提供了一套丰富的运算符来操作变量,Java中运算符可以分为以下:

1.算术运算符

2.关系运算符

3.逻辑运算符

4.位运算符

5.移位运算符以及条件运算符 

2.算术运算符

1.基本五则运算:加减乘除取模(+,-,*,/)

public static void main(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a+b);//30
        System.out.println(a-b);//-10
        System.out.println(a*b);//200
        System.out.println(a/b);//0
        System.out.println(a%b);//10
    }

注意:

1.都是二元运算,使用时必须要有左右两个操作数

2.int/int结果还是int类型,而且会向下取整

public class test {
    public static void main(String[] args) {
        int a=3;
        int b=2;
        System.out.println(a/b);//结果为1
        double c=(double) a/b;
        System.out.println(c);//结果为1.5
        
        int d=10;
        double e=0.5;
        System.out.println(d+e);//结果为10.5,可直接相加,int类型自动提升为double
    }
}

2.增量运算符(+=,-=,*=,/=,%=)

该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。

public class test {
    public static void main(String[] args) {
        int a=3;
        a+=10;//相当于a=a+10;
        System.out.println(a);//13
        a-=5;//相当于a=a-5;
        System.out.println(a);//8
        a*=2;//相当于a=a*2;
        System.out.println(a);//16
        a/=4;//相当于a=a/4;
        System.out.println(a);//4
        a%=2;//相当于a=a%2;
        System.out.println(a);//0
    }
}

注意:只有变量才能使用该操作符,常量不能使用

3.自增,自减运算符(++,--)

++是给变量的值+1,--是给变量的值-1.

public class test {
    public static void main(String[] args) {
        int a=3;
        a++;//a=4
        ++a;//a=5
        System.out.println(a++);//5
        System.out.println(++a);//6
    }
}

注意:

如果单独使用,前置++和后置++没有任何区别

如果混合使用,前置++先加1再使用,后置++使用再+1

只有变量才能使用自增,自减运算符,常量不能使用,因为常量不允许被修改

3.关系运算符

关系运算符主要有六个:==,!=,<,>,<=,>=。其计算结果是true或false。

public class test {
    public static void main(String[] args) {
        int a=3;
        int b=5;
        System.out.println(a==b);//false
        System.out.println(a!=b);//true
        System.out.println(a>b);//false
        System.out.println(a<b);//true
        System.out.println(a>=b);//false
        System.out.println(a<=b);//false
    }
}

 注意:当需要多次判断时,需要用到&&运算符,而不能直接使用两个关系运算符。

4.逻辑运算符(重点)

逻辑运算符主要有三个:&&,||,!,运算结果都是boolean类型。

1.逻辑与&&

语法规则:表达式1&&表达式2,左右表达式必须是boolean类型的结果。

判断规则:两个表达式都为真,结果才为真,有一个为假,则结果为假。

public class test {
    public static void main(String[] args) {
        int a=3;
        int b=5;
        System.out.println(a==3&&b==5);//true
        System.out.println(a>=1&&b<=10);//true
        System.out.println(a<=0&&b<=10);//false
    }
}

2.逻辑或||

语法规则:表达式1&&表达式2,左右表达式必须是boolean类型的结果。

判断规则:两个表达式其中一个为真,结果才为真,都为假,则结果为假。

public class test {
    public static void main(String[] args) {
        int a=3;
        int b=5;
        System.out.println(a==3||b==5);//true
        System.out.println(a>=1||b<=10);//true
        System.out.println(a<=0||b<=10);//true
        System.out.println(a<=0||b>=100);//false
    }
}

3.逻辑非!

语法规则:!表达式

输出:真变假,假变真。

public class test {
    public static void main(String[] args) {
        System.out.println(true);//true
        System.out.println(!true);//false
        System.out.println(false);//false
        System.out.println(!false);//true
    }
}

4.短路求值

&&和||遵守短路求值的规则

public class test {
    public static void main(String[] args) {
        System.out.println(10>20&&10/0==0);//false
        System.out.println(10<20||10/0==0);//true
    }
}

我们都知道,10/0会导致程序抛出异常,但上面的代码却能正常运行,说明10/0并没有真正被求值。

注意:

1.对于&&,如果左侧表达式为false,则表达式结果为false,无需计算右侧表达式

2.对于||,如果左侧表达式为true,则表达式结果为true,无需计算右侧表达式

5.移位运算符

移位运算符有三个:<<,>>,>>>,都是二元运算符,且都是按照二进制比特位来运算的。

1.左移<<:最左侧位不要了,最右侧补0。

public class test6 {
    public static void main(String[] args) {
        int a=0x10;
        System.out.printf("%x\n",a<<1);//20
        //注意:运行结果是按16进制打印的
    }
}

注意:向左移位时,丢弃的是符号位,因此正数左移可能会出现负数

2.右移>>:最右侧位不要了,最左侧补符号位,(正数补0,负数补1)

public class test6 {
    public static void main(String[] args) {
        int a=0x10;
        System.out.printf("%x\n",a>>1);//8
        //注意:运行结果是按16进制打印的
        int b=0xffff0000;
        System.out.printf("%x\n",b>>1);//ffff8000
        
    }
}

3.无符号右移>>>:最右侧位不要了,最左侧补0。

public class test6 {
    public static void main(String[] args) {
        int a=0x10;
        System.out.printf("%x\n",a>>1);//8
        //注意:运行结果是按16进制打印的
        int b=0xffff0000;
        System.out.printf("%x\n",b>>1);//ffff8000
        
    }
}

注意:

1.左移1位,相当于原数字*2,左移N位,相当于原数字*2的N次方。

2.右移1位,相当于原数字/2,右移N位,相当于原数字/2的N次方。

3.由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以用移位运算代替。

4.移动负数位或者移动位数过大都没有意义。

6.条件运算符

条件运算符只有一个:

表达式1?表达式2:表达式3

当表达式1的值为true的时候,整个表达式的值为表达式2的值。

当表达式1的值为false的时候,整个表达式的值为表达式3的值。

 它是Java中唯一一个的三目运算符,是条件判断语句的简化写法。

public class test6 {
    public static void main(String[] args) {
        //求两个数的最大值
        int a=10;
        int b=20;
        int max=a>b?a:b;
        System.out.println(max);//20
    }
}

注意:

1.表达式2和表达式3的结果是要同种类型的,除非能发生类型隐式类型转换。

2.表达式不能单独存在,其产生的结果必须是要被使用。

7.运算符的优先级

在一条表达式中,各个运算符可以混合起来使用进行运算,但是运算符的优先级不同,比如*和/的优先级要高于+和-,有些情况下稍不注意,可能就会造成很大的麻烦。

例如:求a和b的平均值

public class test6 {
    public static void main(String[] args) {
        //求两个数的最大值
        int a=10;
        int b=20;
        int c=a+(b-a)>>1;
        System.out.println(c);//10
    }
}

 上述表达式中,由于+的优先级高于>>,所以a和b-a的结果做加法,整体为20,最后再进行右移,因此结果为10。

注意:

运算符之间是有优先级的,在存在歧义时加上括号即可。

public class test6 {
    public static void main(String[] args) {
        //求两个数的最大值
        int a=10;
        int b=20;
        int c=a+((b-a)>>1);
        System.out.println(c);//10
    }
}

小结:

本篇博客详细介绍了Java中的不同运算符,我们需要掌握它们,以便在后续Java的学习当中使用起来如鱼得水,那么本篇博客到这里就结束啦,给个点赞关注支持一下吧!