Skip to content

🔧 运算符与表达式

运算符分类

Java 中的运算符可以分为以下几类:

  1. 算术运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 位运算符
  5. 赋值运算符
  6. 条件运算符
  7. 其他运算符

算术运算符

基本算术运算符

java
int a = 10;
int b = 3;

System.out.println(a + b);  // 13  (加法)
System.out.println(a - b);  // 7   (减法)
System.out.println(a * b);  // 30  (乘法)
System.out.println(a / b);  // 3   (除法,整数除法)
System.out.println(a % b);  // 1   (取余/取模)

// 浮点数除法
double x = 10.0;
double y = 3.0;
System.out.println(x / y);  // 3.3333333333333335

自增自减运算符

java
int a = 5;

// 前缀自增(先增后使用)
int b = ++a;  // a = 6, b = 6

// 后缀自增(先使用后增)
int c = a++;  // c = 6, a = 7

// 前缀自减
int d = --a;  // a = 6, d = 6

// 后缀自减
int e = a--;  // e = 6, a = 5

示例

java
int x = 5;
System.out.println(x++);    // 输出:5,然后 x = 6
System.out.println(++x);    // x = 7,输出:7
System.out.println(x--);    // 输出:7,然后 x = 6
System.out.println(--x);    // x = 5,输出:5

关系运算符

用于比较两个值的大小关系,返回布尔值:

java
int a = 10;
int b = 5;

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 (等于)
System.out.println(a != b);  // true  (不等于)

// 字符串比较(注意:== 比较的是引用,不是内容)
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");

System.out.println(str1 == str2);      // true(字符串常量池)
System.out.println(str1 == str3);      // false(不同对象)
System.out.println(str1.equals(str3)); // true(内容相同)

逻辑运算符

基本逻辑运算符

java
boolean a = true;
boolean b = false;

System.out.println(a && b);  // false (逻辑与 - AND)
System.out.println(a || b);  // true  (逻辑或 - OR)
System.out.println(!a);      // false (逻辑非 - NOT)

// 短路求值
int x = 5;
// && 短路:如果第一个为 false,不计算第二个
if (x > 10 && x++ > 0) {  // x++ 不会执行
    // ...
}
System.out.println(x);  // 还是 5

// || 短路:如果第一个为 true,不计算第二个
if (x < 10 || x++ > 0) {  // x++ 不会执行
    // ...
}
System.out.println(x);  // 还是 5

位运算符(用于逻辑运算)

java
boolean a = true;
boolean b = false;

System.out.println(a & b);   // false (按位与,不短路)
System.out.println(a | b);   // true  (按位或,不短路)
System.out.println(a ^ b);   // true  (按位异或)

位运算符

用于对整数的二进制位进行操作:

java
int a = 5;   // 二进制:0101
int b = 3;   // 二进制:0011

System.out.println(a & b);   // 1  (按位与:0001)
System.out.println(a | b);   // 7  (按位或:0111)
System.out.println(a ^ b);   // 6  (按位异或:0110)
System.out.println(~a);      // -6 (按位取反)
System.out.println(a << 1);  // 10 (左移:1010)
System.out.println(a >> 1);  // 2  (右移:0010)
System.out.println(a >>> 1); // 2  (无符号右移)

位移运算详解

java
int num = 8;  // 二进制:1000

// 左移(乘以 2 的 n 次方)
System.out.println(num << 1);  // 16 (10000)
System.out.println(num << 2);  // 32 (100000)

// 右移(除以 2 的 n 次方,向下取整)
System.out.println(num >> 1);  // 4 (100)
System.out.println(num >> 2);  // 2 (10)

// 无符号右移(高位补 0)
int negative = -8;
System.out.println(negative >> 1);   // -4
System.out.println(negative >>> 1); // 2147483644

赋值运算符

基本赋值

java
int a = 10;  // 基本赋值

复合赋值运算符

java
int a = 10;

a += 5;   // a = a + 5  → 15
a -= 3;   // a = a - 3  → 12
a *= 2;   // a = a * 2  → 24
a /= 4;   // a = a / 4  → 6
a %= 4;   // a = a % 4  → 2

// 位运算复合赋值
a &= 3;   // a = a & 3
a |= 4;   // a = a | 4
a ^= 5;   // a = a ^ 5
a <<= 1;  // a = a << 1
a >>= 1;  // a = a >> 1
a >>>= 1; // a = a >>> 1

条件运算符(三元运算符)

java
// 语法:条件 ? 值1 : 值2
// 如果条件为 true,返回值1;否则返回值2

int a = 10;
int b = 5;
int max = (a > b) ? a : b;  // max = 10

int score = 85;
String grade = (score >= 60) ? "及格" : "不及格";

// 嵌套使用
int x = 10, y = 20, z = 15;
int max = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);

其他运算符

instanceof 运算符

用于检查对象是否为某个类的实例:

java
String str = "Hello";
Integer num = 10;

System.out.println(str instanceof String);  // true
System.out.println(num instanceof Integer); // true
System.out.println(str instanceof Object);  // true

// 用于继承关系检查
class Animal {}
class Dog extends Animal {}

Animal animal = new Dog();
System.out.println(animal instanceof Dog);    // true
System.out.println(animal instanceof Animal); // true

点运算符(.)

用于访问对象的成员:

java
String str = "Hello";
int length = str.length();  // 访问方法
char ch = str.charAt(0);   // 访问方法

Person person = new Person();
person.name = "张三";       // 访问属性

方括号运算符([])

用于访问数组元素:

java
int[] arr = {1, 2, 3, 4, 5};
int first = arr[0];  // 1
arr[0] = 10;         // 修改元素

new 运算符

用于创建对象:

java
String str = new String("Hello");
int[] arr = new int[5];
Person person = new Person();

运算符优先级

从高到低的优先级顺序:

1. 括号: ()
2. 一元运算符: ++, --, !, ~, +, -, (类型转换)
3. 乘除取余: *, /, %
4. 加减: +, -
5. 位移: <<, >>, >>>
6. 关系: <, <=, >, >=, instanceof
7. 相等: ==, !=
8. 按位与: &
9. 按位异或: ^
10. 按位或: |
11. 逻辑与: &&
12. 逻辑或: ||
13. 条件: ? :
14. 赋值: =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=

优先级示例

java
int result = 2 + 3 * 4;        // 14 (先乘后加)
boolean flag = 5 > 3 && 2 < 1; // false (先比较后逻辑与)
int value = (2 + 3) * 4;        // 20 (括号优先)

表达式

表达式是由运算符和操作数组成的组合:

java
// 算术表达式
int sum = 5 + 3 * 2;  // 11

// 关系表达式
boolean isGreater = 10 > 5;  // true

// 逻辑表达式
boolean result = (5 > 3) && (10 < 20);  // true

// 赋值表达式
int x = 10;
x += 5;  // x = 15

// 条件表达式
int max = (a > b) ? a : b;

类型转换在表达式中的影响

java
// 整数除法
int a = 10;
int b = 3;
System.out.println(a / b);  // 3 (整数除法)

// 浮点数除法
double result = (double) a / b;  // 3.333...
double result2 = a / (double) b; // 3.333...

// 混合运算
int x = 10;
double y = 3.5;
double z = x + y;  // 自动提升为 double,13.5

完整示例

java
public class OperatorDemo {
    public static void main(String[] args) {
        // 算术运算符
        int a = 10, b = 3;
        System.out.println("a + b = " + (a + b));  // 13
        System.out.println("a - b = " + (a - b));  // 7
        System.out.println("a * b = " + (a * b));  // 30
        System.out.println("a / b = " + (a / b));  // 3
        System.out.println("a % b = " + (a % b));  // 1
        
        // 自增自减
        int x = 5;
        System.out.println("x++ = " + x++);  // 5
        System.out.println("x = " + x);      // 6
        System.out.println("++x = " + ++x);  // 7
        
        // 关系运算符
        System.out.println("a > b: " + (a > b));   // true
        System.out.println("a == b: " + (a == b)); // false
        
        // 逻辑运算符
        boolean p = true, q = false;
        System.out.println("p && q: " + (p && q)); // false
        System.out.println("p || q: " + (p || q)); // true
        System.out.println("!p: " + (!p));         // false
        
        // 位运算符
        int m = 5;  // 0101
        int n = 3;  // 0011
        System.out.println("m & n = " + (m & n));  // 1
        System.out.println("m | n = " + (m | n));  // 7
        System.out.println("m ^ n = " + (m ^ n));  // 6
        
        // 赋值运算符
        int num = 10;
        num += 5;
        System.out.println("num += 5: " + num);    // 15
        
        // 条件运算符
        int max = (a > b) ? a : b;
        System.out.println("max(a, b) = " + max);  // 10
        
        // instanceof
        String str = "Hello";
        System.out.println("str instanceof String: " + (str instanceof String)); // true
    }
}

常见陷阱

1. 整数除法

java
int a = 10;
int b = 3;
double result = a / b;  // 3.0,不是 3.333...
// 正确做法
double result2 = (double) a / b;  // 3.333...

2. 字符串拼接

java
System.out.println("结果: " + 5 + 3);   // "结果: 53"
System.out.println("结果: " + (5 + 3)); // "结果: 8"

3. 浮点数比较

java
double d1 = 0.1 + 0.2;
double d2 = 0.3;
System.out.println(d1 == d2);  // false(浮点数精度问题)
// 正确做法
System.out.println(Math.abs(d1 - d2) < 0.0001);  // true

下一步

掌握了运算符后,可以继续学习:


💡 提示:理解运算符优先级和类型转换规则,避免常见的计算错误