当前位置:首页 > 后端开发 > 正文

Java运算符怎么使用?

Java中运算符用于执行数学计算、逻辑判断等操作,分为算术、关系、逻辑、位运算等类型,使用时需注意优先级(如乘除高于加减)和结合性,比较对象时应用equals()而非”==”。

基础运算符使用

Java内置运算符直接用于代码中,分为六类:

  1. 算术运算符

    int a = 10, 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  (取模)
  2. 关系运算符

    Java运算符怎么使用?  第1张

    System.out.println(a > b);  // true
    System.out.println(a == b); // false
  3. 逻辑运算符

    boolean x = true, y = false;
    System.out.println(x && y); // false (与)
    System.out.println(x || y); // true  (或)
    System.out.println(!x);     // false (非)
  4. 位运算符

    int m = 5; // 二进制 0101
    int n = 3; // 二进制 0011
    System.out.println(m & n);  // 1 (按位与: 0001)
    System.out.println(m | n);  // 7 (按位或: 0111)
  5. 赋值运算符

    int c = 5;
    c += 2; // 等价于 c = c + 2 → 7
  6. 三元运算符

    int max = (a > b) ? a : b; // 返回较大值

动态解析字符串运算符(高级场景)

当运算符以字符串形式存在(如从用户输入或配置文件读取),需动态解析:

方法1:使用ScriptEngine(推荐)

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
public class DynamicOperator {
    public static void main(String[] args) throws Exception {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
        String expression = "10 * 3"; // 运算符在字符串中
        Object result = engine.eval(expression);
        System.out.println(result); // 输出 30
    }
}
  • 优点:直接支持数学表达式解析,无需手动处理运算符优先级。
  • 限制:需依赖Java的javax.script包,避免执行非信任代码(安全风险)。

方法2:条件分支匹配

public class OperatorParser {
    public static double calculate(double a, String op, double b) {
        return switch (op) {
            case "+" -> a + b;
            case "-" -> a - b;
            case "*" -> a * b;
            case "/" -> b != 0 ? a / b : Double.NaN; // 避免除零错误
            default -> throw new IllegalArgumentException("无效运算符: " + op);
        };
    }
    public static void main(String[] args) {
        System.out.println(calculate(10, "*", 3)); // 输出 30.0
    }
}
  • 适用场景:预定义有限运算符集合,安全可控。
  • 扩展性:可结合反射优化(通过java.lang.reflect.Method动态调用方法)。

关键注意事项

  1. 类型安全
    • 算术运算注意整数除法(5/2=2),需强制类型转换:(double)5/2=2.5
  2. 空指针检查
    • 动态解析时验证输入非空:if (operator == null) throw new IllegalArgumentException();
  3. 性能考量
    • ScriptEngine首次调用较慢,高频场景建议缓存引擎实例。
  4. 异常处理
    • 捕获ArithmeticException(如除零)、ScriptException(表达式错误)。

应用场景建议

  • 基础计算:直接使用Java内置运算符(高效、类型安全)。
  • 动态规则引擎
    • 配置文件解析 → 用ScriptEngine
    • 用户自定义公式 → 条件分支 + 输入校验
  • 高安全需求:避免ScriptEngine,改用条件分支或表达式解析库(如exp4j)。

引用说明

  1. Oracle官方文档:Java运算符
  2. ScriptEngine使用指南:Java Scripting API
  3. 安全最佳实践:OWASP输入验证规范

通过基础语法结合动态处理技术,可灵活应对各类运算符需求,根据场景选择方案,兼顾性能与安全性。

0