跳转到内容

Java运算符

来自代码酷


Java运算符是用于执行变量或值之间操作的符号。它们是构建表达式和实现程序逻辑的基础工具。本指南将全面介绍Java中的各类运算符,包括算术运算符、关系运算符、逻辑运算符等,并通过示例演示其使用方法。

运算符类型[编辑 | 编辑源代码]

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

1. 算术运算符[编辑 | 编辑源代码]

用于执行基本数学运算:

运算符 描述 示例
+ 加法 a + b
- 减法 a - b
* 乘法 a * b
/ 除法 a / b
% 取模(余数) a % b
++ 自增 a++++a
-- 自减 a----a

示例代码:

public class ArithmeticOperators {
    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 c = 5;
        System.out.println("c++ = " + c++); // 输出: 5 (后置自增)
        System.out.println("++c = " + ++c); // 输出: 7 (前置自增)
    }
}

2. 关系运算符[编辑 | 编辑源代码]

用于比较两个值,返回布尔结果:

运算符 描述 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b

示例代码:

public class RelationalOperators {
    public static void main(String[] args) {
        int x = 5, y = 10;
        System.out.println("x == y: " + (x == y)); // false
        System.out.println("x != y: " + (x != y)); // true
        System.out.println("x > y: " + (x > y));   // false
        System.out.println("x < y: " + (x < y));   // true
    }
}

3. 逻辑运算符[编辑 | 编辑源代码]

用于组合布尔表达式:

运算符 描述 示例
&& 逻辑与 a && b
逻辑或 a b
! 逻辑非 !a

短路特性:

  • &&:如果第一个操作数为false,不计算第二个
  • ||:如果第一个操作数为true,不计算第二个

4. 位运算符[编辑 | 编辑源代码]

直接操作二进制位:

运算符 描述 示例
& 按位与 a & b
按位或 b
^ 按位异或 a ^ b
~ 按位取反 ~a
<< 左移 a << b
>> 右移(带符号) a >> b
>>> 右移(无符号) a >>> b

示例:

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 << 1); // 输出: 10 (1010)

5. 赋值运算符[编辑 | 编辑源代码]

组合赋值操作的简写形式:

运算符 示例 等价于
= a = b
+= a += b a = a + b
-= a -= b a = a - b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b
&= a &= b a = a & b
= = b b
^= a ^= b a = a ^ b
<<= a <<= b a = a << b
>>= a >>= b a = a >> b
>>>= a >>>= b a = a >>> b

6. 三元运算符[编辑 | 编辑源代码]

条件表达式的简写形式: 条件 ? 表达式1 : 表达式2

示例:

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

运算符优先级[编辑 | 编辑源代码]

运算符按以下顺序求值(从高到低):

graph TD A[最高优先级] --> B[后缀: x++ x--] B --> C[一元: ++x --x +x -x ~ !] C --> D[乘除: * / %] D --> E[加减: + -] E --> F[移位: << >> >>>] F --> G[关系: < > <= >= instanceof] G --> H[相等: == !=] H --> I[位与: &] I --> J[位异或: ^] J --> K[位或: |] K --> L[逻辑与: &&] L --> M[逻辑或: ||] M --> N[三元: ? :] N --> O[赋值: = += -= etc.]

实际应用案例[编辑 | 编辑源代码]

案例1:温度转换

// 华氏度转摄氏度
double fahrenheit = 98.6;
double celsius = (fahrenheit - 32) * 5 / 9;
System.out.println(fahrenheit + "°F = " + celsius + "°C");

案例2:权限管理系统

final int READ = 1;    // 0001
final int WRITE = 2;   // 0010
final int EXECUTE = 4; // 0100

int userPermissions = READ | WRITE; // 0011 (3)

// 检查权限
boolean canRead = (userPermissions & READ) == READ;
boolean canExecute = (userPermissions & EXECUTE) == EXECUTE;

常见问题[编辑 | 编辑源代码]

Q: a++++a 有什么区别? A: 前者先使用值再自增,后者先自增再使用值。

Q: 为什么 5 / 2 结果是2而不是2.5? A: 整数除法会丢弃小数部分,如需浮点结果应使用5.0 / 2

Q: 如何正确比较浮点数? A: 由于精度问题,应使用误差范围比较:

double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 0.000001;
boolean equal = Math.abs(a - b) < epsilon;

总结[编辑 | 编辑源代码]

Java运算符提供了丰富的操作功能,理解它们的特性和优先级对编写正确高效的代码至关重要。建议通过实际编程练习来巩固这些概念,特别注意:

  • 不同类型运算符的优先级
  • 整数除法与浮点除法的区别
  • 短路逻辑运算符的特性
  • 位运算在特定场景下的高效应用