8、基本运算符

运算符

  • Java语言支持如下运算符:

    • 算术运算符:+,-,*,/,%,++,--

    • 赋值运算符:=

    • 关系运算符:>,<,>=,==,!=,!=instanceof

    • 逻辑运算符:&&,||,!

    • 位运算符:&,|,^,~,>>,<<,>>>

    • 条件运算符:?

    • 扩展赋值运算符:+=,-=,*=,/=

    二元运算符

    二元运算符中+,-,*,/和我们平常数学中没有什么区别,但是这里我们需要注意一下运算后数据类型的变化以及取模运算。

    public class Demo01 {
        //返回参数数据类型
        public  static String getType(Object o){
           return o.getClass().getName();
        }
        public static void main(String[] args) {
            //二元运算符
            byte a = 8;
            short b = 10;
            int c = 15;
            long d = 12312312312L;
    
            System.out.print(getType(a+b+c+d) + ' '); //打印a+b+c+d的数据类型
            System.out.println(a+b+c+d); //打印a+b+c+d的值
            System.out.print(getType(a+b+c) + ' ');
            System.out.println(a+b+c);
            System.out.print(getType(a+b) + ' ');
            System.out.println(a+b);
            
            //%为取模操作即求余数 10/8=1···2 即 10%8=2
            System.out.println(b%a); 
        }
    }
    

    由此我们可以得出结论:

    • 操作数中有一个数为long类型,那么结果也为long类型(整型)
    • 同理,如果有一个数为double,那么结果也为double(浮点型)
    • 操作数中如果没有long类型,那么结果都为int类型

一元运算符

一元运算符包括自增(++)和自减(--)

例如:

public class Demo03 {
    public static void main(String[] args) {
        // ++ 自增  -- 自减  一元运算符
        int a = 3;
        int b = a++;    //先执行int b = a; 再执行a = a+1; 此时a=4 b=3
        int c = ++a;    //先执行a = a+1; 再执行int c = a; 此时a=5 c=5

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);

        //幂运算
        double d = Math.pow(2,3); //即2^3 = 8  Math是一个数学工具类
        System.out.println(d);
    }
}

输出结果:

关系运算符

关系运算符比较简单,通常用来做比较返回一个布尔值(true/false)

我们直接来看例子:

public class Demo02 {
    public static void main(String[] args) {
        //关系运算符返回的结果:true、false(布尔类型)
        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);
    }
}

输出结果:

逻辑运算符

逻辑运算符包括与(&&)、或(||)、非(!)

还是直接来看例子:

public class Demo04 {
    public static void main(String[] args) {
        //逻辑运算符 &&与 ||或 !非
        boolean a = true;
        boolean b = false;

        //逻辑与运算:两个变量都为true,返回true,否则返回false
        System.out.println("a && b =" + (a && b));
        //逻辑或运算:两个变量中有一个为true,则返回ture,否则返回false
        System.out.println("a || b =" + (a || b));
        //逻辑非运算:如果本身为true,则返回false。如果本身为false,则返回true。
        System.out.println("!(a && b) =" + !(a && b));
    }
}

输出结果:

短路运算

逻辑运算中,如果前面运算中已经出现false,则不会再进行后面的运算

例如:

public class Demo05 {
    public static void main(String[] args) {
        //短路运算
        int a = 5;
        boolean b = (a<4)&&(a++>5); //a<4为false,后面不会进行运算

        System.out.println(b);  //false
        System.out.println(a);  //a++不会被执行  a=5
    }
}

上面运算中,先判断 a<4 结果为false ,则不会再计算a++>5 。

输出结果:

位运算符

直接上例子:

A = 0011 1100
B = 0000 1101

与运算 A&B = 0000 1100 都为1,才为1
或运算 A|B = 0011 1101 有一个1,就为1
非运算 ~A = 1100 0011 取反:0为1,1为0
异或运算 A^B = 0011 0001 两个相同则为0,不同为1

左移<< a向左移一位相当于a*2
右移>> a向右移一位相当于a/2
若符号位为正,则在最高位插入0;若符号位为负,则在最高位插入1
无符号右移>>> 无论正负,都在最高位插入0左移右移效率极高

计算2*8 最快的方法即为 2<<3

三元运算符

x ? y : z 这个语句的意思为如果x为真,则结果为y,否则结果为z

运算符优先级

优先级 运算符
1 ()
2 一元运算符:+(正数)、-(负数)、!(逻辑非)、~(按位取反)、(++)自增、(--自减)
3 二元运算符:* / % + - (* / % 优先级要高于 + -)
4 位运算符:<< >> >>>
5 <、<=、>、>=、instanceof
6 == 、!=
7 &
8 ^
9 |
10 &&
11 ||
12 三元运算符 ? :
13 =、+=、-=、*=、/=、%=、&=、 |=、 ^=、<= 、>= 、>>=
posted @ 2021-03-14 23:44  都怪你  阅读(273)  评论(0)    收藏  举报
/*复制代码*/