基础运算符使用
Java内置运算符直接用于代码中,分为六类:
-
算术运算符
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 (取模)
-
关系运算符
System.out.println(a > b); // true System.out.println(a == b); // false
-
逻辑运算符
boolean x = true, y = false; System.out.println(x && y); // false (与) System.out.println(x || y); // true (或) System.out.println(!x); // false (非)
-
位运算符
int m = 5; // 二进制 0101 int n = 3; // 二进制 0011 System.out.println(m & n); // 1 (按位与: 0001) System.out.println(m | n); // 7 (按位或: 0111)
-
赋值运算符
int c = 5; c += 2; // 等价于 c = c + 2 → 7
-
三元运算符
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
动态调用方法)。
关键注意事项
- 类型安全
- 算术运算注意整数除法(
5/2=2
),需强制类型转换:(double)5/2=2.5
。
- 算术运算注意整数除法(
- 空指针检查
- 动态解析时验证输入非空:
if (operator == null) throw new IllegalArgumentException();
。
- 动态解析时验证输入非空:
- 性能考量
ScriptEngine
首次调用较慢,高频场景建议缓存引擎实例。
- 异常处理
- 捕获
ArithmeticException
(如除零)、ScriptException
(表达式错误)。
- 捕获
应用场景建议
- 基础计算:直接使用Java内置运算符(高效、类型安全)。
- 动态规则引擎:
- 配置文件解析 → 用
ScriptEngine
- 用户自定义公式 → 条件分支 + 输入校验
- 配置文件解析 → 用
- 高安全需求:避免
ScriptEngine
,改用条件分支或表达式解析库(如exp4j
)。
引用说明
- Oracle官方文档:Java运算符
ScriptEngine
使用指南:Java Scripting API- 安全最佳实践:OWASP输入验证规范
通过基础语法结合动态处理技术,可灵活应对各类运算符需求,根据场景选择方案,兼顾性能与安全性。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/23234.html