7. Java 运算符 6个月前

编程语言
289
7. Java 运算符

Java 运算符

Java运算符,是一些特殊的符号,它们对一个或者多个操作数执行特定的运算,然后返回一个结果

我们可以将Java运算符分为以下几类

  • 算术运算符

  • 关系运算符

  • 位运算符

  • 逻辑运算符

  • 赋值运算符

  • 其他运算符

下面分别来讲解这几种运算符

1 算术运算符

算术运算符和数学中的运算符的作用是一样的,下面列出了所有的算术运算符

假如 a = 20 , b = 10 , 如下:

操作符 描述 例子
+ 加法 :相加运算符两侧的值 a + b 等于 30
- 减法 :左操作数减去右操作数 a – b 等于 10
***** 乘法 :相乘操作符两侧的值 a * b等于 200
/ 除法 :左操作数除以右操作数 a / b 等于 2
取余 :左操作数除以右操作数的余数 a % b 等于 0
++ 自增 :操作数的值增加1 b++ 或 ++b 等于 11(区别详见下文)
-- 自减 : 操作数的值减少1 b-- 或 --b 等于 9(区别详见下文)

示例1:

public class HelloWorld {
    public static void main(String[] args){
        int a = 6;
        int b = 2;
        int c = 5;

        System.out.println( a + b ); //输出 8
        System.out.println( a - b ); //输出 4
        System.out.println( a * b ); //输出 12
        System.out.println( a / b ); //输出 3

        System.out.println( a % b ); //输出 0
        System.out.println( a % c ); //输出 1
    }
}

下面讲讲 a++++a的区别

  • a++ 变量名在前面,++ 在后面:意思就是 先使用 a , 再对 a 进行自增操作
  • ++a 变量名在后面, ++ 在前面:意思就是 先对a自增操作,再使用a

-- 操作符和 ++ 类似

举例说明:

示例2:

public class HelloWorld {
    public static void main(String[] args){
        int a = 6;
        int b = 6;

        System.out.println( a++ );  // 输出 6  - 先使用 a ,也就是先打印 a  打印完 a 的值后,再对 a 进行自增
        System.out.println( a );    // 输出 7

        System.out.println( ++b );  // 输出 7  - 先对 b 自增,再打印,所以输出 7
        System.out.println( b );    // 输出 7
    }
}

2 关系运算符

关系运算符也称为比较运算符,比如 大于小于等于不等于 ....

比较的结果是一个布尔值(true或者 false)

下表列出了关系运算符 , 假如 a = 2, b = 3

运算符 描述 例子 (a = 2, b = 3)
== 检查如果两个操作数的值是否相等,如果相等则条件为真。 (a == b)为 false
!= 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (a != b) 为 true
> 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (a > b)为 false
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (a < b)为 true
>= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 (a >= b)为 false
<= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 (a <= b)为 true

示例:

public class HelloWorld {
    public static void main(String[] args) {
        int a = 2;
        int b = 3;

        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 );   // 输出 true
    }
}

注意:比如两个值是否相等,是 == ,两个等号,不是一个等号,一个等号的 = 是赋值运算符,后面会讲到

3 位运算符

Java语言提供了对整型类型的数值进行位操作称作位运算符

位运算符在实际的编码中,运用的不是很多,但是在有些场合下使用的话,能提高代码的效率

假如 a = 75 , b = 24 , 对应的二进制如下

a = 75 <==> 0100 1011

b = 24 <==> 0001 1000

如下表

操作符 描述 例子
如果相对应位都是1,则结果为1,否则为0 (a & b),得到12,即 0000 1000
| 如果相对应位都是 0,则结果为 0,否则为 1 (a | b ) , 得到 91 , 即 0101 1011
^ 如果相对应位值相同,则结果为0,否则为1 (a ^ b), 得到 83,即 0101 0011
按位取反运算符翻转操作数的每一位,即0变成11变成0 (〜a), 得到 -76,即 -100 1100
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。 a << 2 , 得到 300,即 1011 1011 1000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。 a >> 2, 得到18, 即 0001 0010
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 a>>>2 , 得到 18, 即 0001 0010

4 逻辑运算符

Java的逻辑运算符包括 && , || , !

下面表格列出, 其中 a = true, b = false

运算符 描述 例子 (a = true, b = false)
&&(与) 当且仅当两个操作数都为真,条件才为真。只要有一个为假,则条件为假 ( a && b )为 false
||(或) 或操作符。其中只要有一个操作数为真是,条件为真。只有所有操作数都为假,条件为假 ( a || b )为 true
!(非) 非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 ! a 为 false

示例:

public class HelloWorld {

    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;

        System.out.println( a && b );   //输出 false
        System.out.println( a || b );   //输出 true
        System.out.println( !a );       //输出 false
    }
}

短路逻辑运算符

当使用 && 或者 || 这两个运算符时,只要第一个操作能决定整个结果时,其它的操作数就不会再执行了。

  • && 的短路

    a = true, b = false , 则 b && a 为 false

    因为 && 运算符,2 个(也可以 2 个以上)都为真是,才为真

    只要有一个为假,则为假

    所以上面的 b && a ,第一个操作数 bfalse,则整个条件肯定是假,后面的操作数就不会再判断 a 了

  • || 的短路

    a = true, b = false,则 a || b 为 true

    因为 || 运算符,只要有一个为真,则条件为 true

    所以 a || b , 只判断 a 的值 , b的值不再判断了

    因为 atrue,就决定了整个条件为 true

下面的示例能更清楚的演示这个问题:

示例1 :演示 && 的短路

public class HelloWorld {
    private boolean a = true;
    private boolean b = false;

    boolean getA(){
        System.out.println("打印了 a ");
        return a;
    }

    boolean getB(){
        System.out.println("打印了 b ");
        return b;
    }


    public static void main(String[] args) {

        HelloWorld hello = new HelloWorld();

        // getB() && getA() ,因为 getB() 为 false,决定了整个条件为 false
        // 所以后面的 getA()方法就不再执行了,“打印了 a” 这句话也不会输出了
        System.out.println( hello.getB() && hello.getA() );
    }
}

输出如下:

打印了 b false

示例2:演示 ||的短路

public class HelloWorld {
    private boolean a = true;
    private boolean b = false;

    boolean getA(){
        System.out.println("打印了 a ");
        return a;
    }

    boolean getB(){
        System.out.println("打印了 b ");
        return b;
    }


    public static void main(String[] args) {

        HelloWorld hello = new HelloWorld();

        // getA() && getB() ,因为 getA() 为 true,决定了整个条件为 true
        // 所以后面的 getB()方法就不再执行了,“打印了 b” 这句话也不会输出了
        System.out.println( hello.getA() || hello.getB() );
    }
}

输出如下:

打印了 a true

5 赋值运算符

Java赋值运算符,顾名思义,就是给变量赋值的。下面是Java的支持的赋值运算符

下面表格中,int a = 10, int b = 20

操作符 描述 例子
= 简单的赋值运算符,将右操作数的值赋给左侧操作数 int c = a + b , 把 a + b 的值 赋值给 c ,此时 c = 30
+= 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 a += b 等价于 a = a + b ,此时 a = 30
-= 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 a -= b 等价于 a = a - b , 此时 a = -10
*= 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 a *= b 等价于 a = a * b ,此时 a = 200
/= 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 b /= a 等价于 b = b / a , 此时 b = 2
%= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 b %= a 等价于 b = b % a ,此时 b = 0
<<= 左移位赋值运算符 a << = 2等价于 a = a << 2
>>= 右移位赋值运算符 a >> = 2等价于a = a >> 2
&= 按位与赋值运算符 a&= 2等价于a = C&2
^ = 按位异或赋值操作符 a ^ = 2等价于a = a ^ 2
|= 按位或赋值操作符 a |= 2 等价于a = a |2

示例:

public class HelloWorld {

    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        int c0 = a + b; // c0 = 30

        int c1 = 3 ;
        c1 += a;    // c1 = 13

        int c2 = 13;
        c2 -= a;    // c2 = 3

        int c3 = 3;
        c3 *= a;    // c3 = 30

        int c4 = 20;
        c4 /= a;    // c4 = 2;

        int c5 = 23;
        c5 %= a;    // c5 = 3

        int c6 = 0;
        c6 = a <<= 2;   // c6 = 40

        int c7 = 0;
        c7 = a >>= 2;   // c7 = 10

        int c8 = 0;
        c8 = a &= 2;    // c8 = 2

        int c9 =0;
        c9 ^= 2;        // c9 = 2

        int c10 = 0;
        c10 |= 2;       // c10 = 2
    }
}

6 其它运算符

1 三目运算符 ?:

该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

一个简单的例子

public class HelloWorld {

    public static void main(String[] args) {
        //学生分数
        int score = 75;

        //是否及格, 当分数大于60,isPass 就取true, 否则为 false
        boolean isPass = score > 60 ? true : false;

        System.out.println( isPass ); // 输出 true
    }
}

语法如下:

variable x = (expression) ? value if true : value if false

再对着上面的例子,就容易理解了。

主要就是前面条件为真,就取 问号后面的值,否则,就取 冒号 后面的值

2 instanceof 运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

object instanceof var ,返回的是一个boolean值

如下面示例:

public class HelloWorld {

    public static void main(String[] args) {
        Object obj = "www.helloworld.net";

        //判断 obj 是否是 String 类型的变量
        boolean b = obj instanceof String;

        System.out.println( b );    // 输出 true
    }
}

7 Java运算符优先级

当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级问题。

就算数学中的加减乘除一样,有加法有乘法,先算乘法,后算加法一样,有括号的先算括号的。

Java的运算符也是有一个优先级的。

下表按照优先级从高到低排列。如下:

类别 操作符 关联性
后缀 () [] . (点操作符) 左到右
一元 expr++ expr-- 从左到右
一元 ++expr --expr + - ~ ! 从右到左
乘性 * / % 左到右
加性 + - 左到右
移位 >> >>> << 左到右
关系 >>= <<= 左到右
相等,不等 == != 左到右
按位与 左到右
按位异或 ^ 左到右
按位或
逻辑与 && 左到右
逻辑或
条件 ?: 从右到左
赋值 = + = - = * = / =%= >> = << =&= ^ = =
逗号 左到右

小结

Java的运算符有以下几种:

  • 算术运算符
  • 关系运算符
  • 位运算符
  • 逻辑运算符
  • 赋值运算符
  • 其他运算符

运算符之间有优先级

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2223480
累计阅读

热门教程文档

QT
33小节
PHP
52小节
Kotlin
68小节
Objective-C
29小节
Swift
54小节