Appearance
🔧 运算符与表达式
运算符分类
Java 中的运算符可以分为以下几类:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 条件运算符
- 其他运算符
算术运算符
基本算术运算符
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下一步
掌握了运算符后,可以继续学习:
💡 提示:理解运算符优先级和类型转换规则,避免常见的计算错误
