掌握 Java 运算符:从基础到进阶

89 阅读7分钟

Java 作为一种面向对象的编程语言,提供了丰富的运算符来进行各种操作。本文将详细介绍 Java 中的各种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他特殊运算符。

一,算术运算符

算术运算符用于执行基本的数学运算,如加减乘除等。Java 支持以下算术运算符:

  • + 加法运算符:用于两个操作数相加。
  • - 减法运算符:用于从第一个操作数中减去第二个操作数。
  • * 乘法运算符:用于两个操作数相乘。
  • / 除法运算符:用于第一个操作数除以第二个操作数。
  • % 取模运算符:用于返回第一个操作数除以第二个操作数的余数。
  • ++ 自增运算符:用于将操作数的值增加 1。
  • -- 自减运算符:用于将操作数的值减少 1。

示例代码:

int a = 10;
int b = 20;
int c = a + b; // c = 30
int d = b - a; // d = 10
int e = a * b; // e = 200
int f = b / a; // f = 2
int g = b % a; // g = 0
a++; // a = 11
b--; // b = 19

二,关系运算符

关系运算符用于比较两个操作数之间的关系,返回一个布尔值(true 或 false)。Java 支持以下关系运算符:

  • == 等于:如果两个操作数相等,则返回 true。
  • != 不等于:如果两个操作数不相等,则返回 true。
  • > 大于:如果第一个操作数大于第二个操作数,则返回 true。
  • < 小于:如果第一个操作数小于第二个操作数,则返回 true。
  • >= 大于等于:如果第一个操作数大于或等于第二个操作数,则返回 true。
  • <= 小于等于:如果第一个操作数小于或等于第二个操作数,则返回 true。

示例代码:

int a = 10;
int b = 20;
boolean result1 = (a == b); // result1 = false
boolean result2 = (a != b); // result2 = true
boolean result3 = (a > b);  // result3 = false
boolean result4 = (a < b);  // result4 = true
boolean result5 = (a >= b); // result5 = false
boolean result6 = (a <= b); // result6 = true

三,逻辑运算符

逻辑运算符用于连接多个布尔表达式,返回一个布尔值。Java 支持以下逻辑运算符:

  • && 逻辑与:如果两个操作数都为 true,则返回 true。
  • || 逻辑或:如果两个操作数中至少有一个为 true,则返回 true。
  • ! 逻辑非:用于反转操作数的布尔值。

示例代码:

boolean a = true;
boolean b = false;
boolean result1 = (a && b); // result1 = false
boolean result2 = (a || b); // result2 = true
boolean result3 = !a;       // result3 = false

四, 位运算符

位运算符用于对整数类型的位进行操作。Java 支持以下位运算符:

  • & 按位与:对两个操作数的每一位执行与操作。
  • | 按位或:对两个操作数的每一位执行或操作。
  • ^ 按位异或:对两个操作数的每一位执行异或操作。
  • ~ 按位非:对操作数的每一位执行非操作。
  • << 左移:将操作数的位向左移动指定的位数。
  • >> 右移:将操作数的位向右移动指定的位数。
  • >>> 无符号右移:将操作数的位向右移动指定的位数,左边空出的位以零填充。

示例代码:

public class BitwiseOperators {
    public static void main(String[] args) {
        int a = 5;  // 二进制:0101
        int b = 3;  // 二进制:0011

        int result1 = a & b;  // result1 = 1  (二进制:0001)
        int result2 = a | b;  // result2 = 7  (二进制:0111)
        int result3 = a ^ b;  // result3 = 6  (二进制:0110)
        int result4 = ~a;     // result4 = -6 (二进制:1010)
        int result5 = a << 1; // result5 = 10 (二进制:1010)
        int result6 = a >> 1; // result6 = 2  (二进制:0010)
        int result7 = a >>> 1;// result7 = 2  (二进制:0010)

        System.out.println("a & b = " + result1);
        System.out.println("a | b = " + result2);
        System.out.println("a ^ b = " + result3);
        System.out.println("~a = " + result4);
        System.out.println("a << 1 = " + result5);
        System.out.println("a >> 1 = " + result6);
        System.out.println("a >>> 1 = " + result7);
    }
}
解释:
  1. 按位与 (&)

    • a & b:0101 & 0011 = 0001,即 5 & 3 = 1。
  2. 按位或 (|)

    • a | b:0101 | 0011 = 0111,即 5 | 3 = 7。
  3. 按位异或 (^)

    • a ^ b:0101 ^ 0011 = 0110,即 5 ^ 3 = 6。
  4. 按位非 (~)

    • ~a:~0101 = 1010,即 ~5 = -6(在 Java 中,整数使用的是补码表示法)。
  5. 左移 (<<)

    • a << 1:0101 << 1 = 1010,即 5 << 1 = 10。
  6. 右移 (>>)

    • a >> 1:0101 >> 1 = 0010,即 5 >> 1 = 2。
  7. 无符号右移 (>>>)

    • a >>> 1:0101 >>> 1 = 0010,即 5 >>> 1 = 2(对于正数,>>>>> 的效果是相同的)。

通过这些位运算符,您可以在低级别上操作数据位,这在某些性能关键的场景中非常有用。

五,赋值运算符

赋值运算符用于将右侧操作数的值赋给左侧操作数。Java 支持以下赋值运算符:

  • = 简单赋值运算符:将右侧操作数的值赋给左侧操作数。
  • += 加且赋值运算符:将右侧操作数的值加到左侧操作数,并将结果赋给左侧操作数。
  • -= 减且赋值运算符:将右侧操作数的值从左侧操作数中减去,并将结果赋给左侧操作数。
  • *= 乘且赋值运算符:将右侧操作数的值乘以左侧操作数,并将结果赋给左侧操作数。
  • /= 除且赋值运算符:将左侧操作数的值除以右侧操作数,并将结果赋给左侧操作数。
  • %= 取模且赋值运算符:将左侧操作数的值对右侧操作数取模,并将结果赋给左侧操作数。
  • &= 按位与且赋值运算符:将左侧操作数的值与右侧操作数按位与,并将结果赋给左侧操作数。
  • |= 按位或且赋值运算符:将左侧操作数的值与右侧操作数按位或,并将结果赋给左侧操作数。
  • ^= 按位异或且赋值运算符:将左侧操作数的值与右侧操作数按位异或,并将结果赋给左侧操作数。
  • <<= 左移且赋值运算符:将左侧操作数的位左移指定的位数,并将结果赋给左侧操作数。
  • >>= 右移且赋值运算符:将左侧操作数的位右移指定的位数,并将结果赋给左侧操作数。
  • >>>= 无符号右移且赋值运算符:将左侧操作数的位无符号右移指定的位数,并将结果赋给左侧操作数。

示例代码:

int a = 10;
a += 5;  // a = 15
a -= 3;  // a = 12
a *= 2;  // a = 24
a /= 4;  // a = 6
a %= 4;  // a = 2
a &= 1;  // a = 0
a |= 2;  // a = 2
a ^= 3;  // a = 1
a <<= 2; // a = 4
a >>= 1; // a = 2
a >>>= 1; // a = 1

六,其他特殊运算符

Java 还提供了一些其他特殊运算符:

  • ?: 条件运算符(三元运算符):根据布尔表达式的值返回两个值之一。
  • instanceof 运算符:用于测试一个对象是否是一个特定类的实例。
  • . 成员访问运算符:用于访问对象的字段和方法。
  • [] 数组下标运算符:用于访问数组中的元素。
  • () 方法调用运算符:用于调用方法。

示例代码:

// 条件运算符
int a = 10;
int b = 20;
int max = (a > b) ? a : b; // max = 20

// instanceof 运算符
String str = "Hello";
boolean result = str instanceof String; // result = true

// 成员访问运算符
class MyClass {
    int value = 10;
    void display() {
        System.out.println("Value: " + value);
    }
}
MyClass obj = new MyClass();
obj.display(); // 输出: Value: 10

// 数组下标运算符
int[] arr = {1, 2, 3};
int element = arr[1]; // element = 2

// 方法调用运算符
public class MyClass {
    void myMethod() {
        System.out.println("Hello, World!");
    }
}
MyClass obj = new MyClass();
obj.myMethod(); // 输出: Hello, World!

通过这些赋值运算符和其他特殊运算符,Java 提供了丰富的操作方式,使编程更加灵活和高效。