Java中多种运算符详细讲解


**

一、算术运算符

**
包括 +(加)、-(减)、*(乘)、/(除)、%(取余)、++(自增)、--(自减)。

  1. 整数除法特性:两个整数相除结果为整数(直接舍去小数),例如 5/2=2;若需精确结果,需至少一个操作数为浮点数(如 5.0/2=2.5)。
  2. 自增/自减:
    • i++:先取值再自增(返回原值);
    • ++i:先自增再取值(返回新值)。
  3. 字符运算:char类型参与运算时转为ASCII码(如 'A'+10=75),需强制类型转换才能输出字符。

二、赋值运算符

包括 =+=-=*=/=%= 等复合运算符。

  • 复合运算符特性:自动处理类型转换,例如 byte a=10; a +=5 不会报错,而直接 a = a+5 会因类型提升导致编译错误。
  • 字符串连接符:+ 用于字符串拼接(如 "a"+5="a5"),但非字符串类型会隐式转换为字符串。

三、关系运算符(比较运算符)

包括 ==!=><>=<=,返回布尔值 true/false

  • 对象比较:instanceof 用于判断对象是否属于某个类(如 "abc" instanceof String → true)。
  • 浮点数比较:避免直接比较浮点数相等(精度问题),建议使用差值阈值。

四、逻辑运算符

  1. 基本逻辑运算符:
    • &(逻辑与):两表达式均为真时结果为真;
    • |(逻辑或):任一表达式为真则结果为真;
    • !(逻辑非):取反;
    • ^(异或):两表达式不同为真。
  2. 短路运算符(高效特性):
    • &&(短路与):左边为假则右边不执行;
    • ||(短路或):左边为真则右边不执行。

五、位运算符

针对二进制补码进行逐位操作:

  1. 基础运算符:
    • &(按位与):全1则1,否则0;
    • |(按位或):有1则1;
    • ~(按位非):取反;
    • ^(按位异或):相同为0,不同为1。
  2. 移位运算符:
    • <<(左移):高位丢弃,低位补0(相当于乘2);
    • >>(带符号右移):正数补0,负数补1(相当于除2);
    • >>>(无符号右移):高位补0。

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

格式:条件 ? 表达式1 : 表达式2,例如 int max = (a > b) ? a : b

  • 应用场景:简化简单的 if-else 逻辑,但嵌套过深会降低可读性。

注意事项

  1. 类型提升规则:运算中低精度类型自动提升为高精度类型(如 byte + int → int)。
  2. 运算符优先级:括号 () 最高,赋值运算符 = 最低,完整优先级需参考官方文档。
  3. 特殊值处理:0/0.0 得到 NaN,可用 Double.isNaN() 检测;非零数除以0得到 Infinity

Java运算符应用示例(结合常见开发场景)


一、算术运算符

  1. 整数除法与浮点转换
    int a = 5 / 2;        // 结果:2(舍去小数)
    double b = 5.0 / 2;   // 结果:2.5(浮点运算)
    
    应用场景:计算商品数量分页时需整数除法,财务计算需浮点精度。

2. 自增运算符特性

int i = 5;
int x = i++;  // x=5(先赋值再自增)
int y = ++i;  // y=7(先自增再赋值)

应用场景:循环计数器或顺序生成唯一ID。

3. 字符运算转换

char c = 'A';
int code = c + 10;        // 结果:75(ASCII码计算)
char newC = (char) code;  // 强制转换后:'K'

应用场景:加密算法中字符偏移处理。


二、赋值运算符

  1. 复合赋值类型转换

    byte num = 10;
    num += 5;     // 合法,等价于 num = (byte)(num + 5)
    // num = num + 5;  // 编译错误(类型提升为int)
    

    应用场景:硬件寄存器操作时避免类型溢出。

  2. 字符串拼接

    String s = "ID:" + 1001;  // 结果:"ID:1001"
    

    应用场景:动态生成日志信息或SQL语句。


三、关系运算符

  1. 浮点数比较

    double d1 = 0.1 + 0.1 + 0.1;
    double d2 = 0.3;
    boolean isEqual = Math.abs(d1 - d2) < 1e-6;  // 避免精度误差 
    

    应用场景:金融计算或科学实验数据校验。

  2. 对象类型判断

    Object obj = "Hello";
    if (obj instanceof String) {  // 结果为true 
        System.out.println("字符串类型");
    }
    

    应用场景:反射机制或泛型类型检查。


四、逻辑运算符

  1. 短路特性优化性能

    if (list != null && list.size() > 0) { 
        // 若list为null,list.size()不会执行 
    }
    

    应用场景:避免空指针异常,提升代码健壮性。

  2. 异或加密

    int data = 0b1010;
    int key = 0b1100;
    int encrypted = data ^ key;  // 加密结果:0110 
    

    应用场景:简单数据加密或校验码生成。


五、位运算符

  1. 高效乘除运算

    int a = 8 << 2;  // 结果:32(等价于8*2²)
    int b = 16 >> 1; // 结果:8(等价于16/2)
    

    应用场景:图像处理或底层协议解析。

  2. 奇偶判断

    int num = 7;
    boolean isOdd = (num & 1) == 1;  // 结果为true 
    

    应用场景:算法优化或位掩码操作。


六、三元运算符

int score = 85;
String result = (score >= 60) ? "及格" : "补考";  // 结果:及格 

-应用场景*:简化条件分支,如状态码转换或UI显示逻辑。


Java运算符综合应用案例

简易用户权限管理系统(基于位运算与逻辑判断)


案例背景
设计一个用户权限管理系统,通过位运算符高效管理权限标识,结合逻辑运算符进行权限校验,使用三元运算符简化状态输出,并通过算术/关系运算符处理用户输入验证。


核心实现代码

public class PermissionSystem {
    // 权限常量定义(位运算左移生成唯一标识)
    public static final int READ = 1 << 0;    // 0001 (1)
    public static final int WRITE = 1 << 1;   // 0010 (2)
    public static final int DELETE = 1 << 2;  // 0100 (4)
    public static final int ADMIN = 1 << 3;   // 1000 (8)
 
    static class User {
        private String name;
        private int permissions;  // 用二进制位组合存储权限 
 
        public User(String name) {
            this.name = name;
            this.permissions = 0;  // 初始无权限 
        }
 
        // 添加权限(位或运算)
        public void addPermission(int perm) {
            if (perm < 1 || perm > 15) {  // 关系运算符验证范围 
                System.out.println("无效权限码!");
                return;
            }
            permissions |= perm;  // 复合赋值运算符等价于 permissions = permissions | perm 
            System.out.println(name + " 权限更新: " + Integer.toBinaryString(permissions));
        }
 
        // 移除权限(位与非运算)
        public void removePermission(int perm) {
            permissions &= ~perm;  // 位运算组合操作 
            System.out.println(name + " 权限更新: " + Integer.toBinaryString(permissions));
        }
 
        // 检查权限(位与运算 + 逻辑非判断)
        public boolean hasPermission(int perm) {
            return (permissions & perm) != 0;  // 若结果非0则表示有权限 
        }
 
        // 生成权限报告(三元运算符简化输出)
        public String getPermissionReport() {
            return "用户: " + name + "\n"
                    + "读取权限: " + (hasPermission(READ) ? "✔" : "✘") + "\n"
                    + "写入权限: " + (hasPermission(WRITE) ? "✔" : "✘") + "\n"
                    + "删除权限: " + (hasPermission(DELETE) ? "✔" : "✘") + "\n"
                    + "管理员: " + (hasPermission(ADMIN) ? "✔" : "✘");
        }
    }
 
    public static void main(String[] args) {
        User user = new User("Alice");
 
        // 权限动态操作(结合算术运算符计算权限码)
        user.addPermission(READ + WRITE);  // 1+2=3 (0011)
        user.addPermission(DELETE);        // 0011 | 0100 = 0111 (7)
        user.removePermission(WRITE);      // 0111 & ~0010 = 0101 (5)
 
        // 权限校验(逻辑与短路特性优化性能)
        boolean canEdit = user.hasPermission(WRITE) && checkResourceAvailable();
        System.out.println("编辑操作授权结果: " + canEdit);
 
        // 输出权限报告 
        System.out.println(user.getPermissionReport());
    }
 
    // 模拟资源检查(避免空指针的短路逻辑)
    private static boolean checkResourceAvailable() {
        // 实际开发中可能涉及对象非空判断,如:resource != null && resource.isValid()
        return false;  // 假设资源不可用 
    }
}

运行结果与场景分析

  1. 权限更新日志

    Alice 权限更新: 11     // 二进制 1011(实际为3,此处应为0011,需修正权限计算逻辑)
    Alice 权限更新: 111 
    Alice 权限更新: 101 
    

    说明:通过|=快速叠加权限,& ~精准移除特定权限,二进制位直观反映权限状态。

  2. 权限校验逻辑

    • hasPermission(WRITE)false时,&&右侧的checkResourceAvailable()不会执行,避免不必要的资源检查。
  3. 最终权限报告

    用户: Alice 
    读取权限: ✔ 
    写入权限: ✘ 
    删除权限: ✔ 
    管理员: ✘ 
    

    说明:三元运算符? :替代多重if-else,使状态输出更简洁。


关键技术点

  1. 位运算符高效管理权限

    • <<生成互斥权限标识,单整数存储多权限状态(最多32种权限)
    • |=&= ~实现权限动态增删,避免数据库频繁更新
  2. 类型安全与输入校验

    • 关系运算符<>限制权限码范围
    • 算术运算符+动态组合基础权限(如READ + WRITE=3
  3. 逻辑运算符短路特性

    • &&在权限校验中提前终止无效判断,提升性能
  4. 复合赋值运算符

    • |=替代permissions = permissions | perm,代码更简洁且自动处理类型转换

扩展应用场景

  1. 加密算法:结合^异或运算符实现简单数据加密(如data ^ key
  2. 性能优化:用<<>>替代乘除运算(如capacity << 1实现容量翻倍)
  3. 状态机设计:通过位运算组合多种系统状态(如订单状态:已支付+已发货+未评价)

通过此案例可看出,合理运用各类运算符能显著提升代码执行效率和可读性,尤其在底层系统开发中作用突出。

😍😍 海量H5小游戏、微信小游戏、Web casualgame源码😍😍
😍😍试玩地址: https://www.bojiogame.sg😍😍
😍看上哪一款,需要源码的csdn私信我😍

————————————————

​最后我们放松一下眼睛
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极致人生-010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值