• 第三章:Java运算符


    运算符就是对操作数进行操作的符号,例如a+bab是操作数,+是运算符。Java中运算符和C语言中的运算符基本一致(当然也有自己的特点)。运算符主要有以下几类

    • 算数运算符
    • 关系运算符
    • 逻辑运算符
    • 位运算符
    • 移位运算符
    • 条件运算符

    一:算数运算符

    (1)基本算数运算符:+-*\%

    • 它们都是二元运算符,也即运算时需要左右两个操作数

    ①:两个int相除时结果仍为int,同时还会向下取整,这一点很多人容易犯错

    public class TestDemo {
        public static void main(String[] args) {
            int a = 3;
            int b = 2;
            System.out.println(a / b);//实际输出1,舍弃小数位
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    ②:当两侧操作数类型不一致时,会向类型大的提升,这里尤其注意/

    public class TestDemo {
        public static void main(String[] args) {
            // 类型提升
            System.out.println(1+0.2);//1已经被提升为了double,输出1.2
    
            //注意/运算符
            System.out.println(5/2);//输出2
            System.out.println((float)5/2);//输出2.5
            System.out.println(5/(float)2);//输出2.5
            System.out.println((float)(5/2));//输出2.0
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ③:\%运算时,右操作数不能为0

    • 在数学中叫做除数不能为0
    • 程序运行后会抛出异常
    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            int b = 0;
            System.out.println(a / b);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    ④:%也可以操作负数

    public class TestDemo {
        public static void main(String[] args) {
            System.out.println(10 % 3);
            System.out.println(10 % -3);
            System.out.println(-10 % 3);
            System.out.println(-10 % -3);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    (2)增量运算符:+=-=*=\=%=

    • 这一部分和C语言一致
    • 注意:增量运算符具有自动类型转换的功能
    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            a+=2; //相当于a=a+2
            System.out.println(a);
    
            int b = 1;
            b-=2; //相当于b=b-2
            System.out.println(b);
    
            int c = 1;
            c*=2; //相当于c=c*2
            System.out.println(c);
    
            int d = 1;
            d/=2; //相当于d=d/2
            System.out.println(d);
    
            int e = 3;
            e%=2; //相当于e=e%2
            System.out.println(e);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    (3)自增自减运算符:++--

    • 如果单独使用,那么【前置++】和【后置++】无任何区别
    • 如果混合使用,那么【前置++】是先+1然后再使用变量+1之后的值,【后置++】则相反
    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            System.out.println(a++);//先使用故输出1,然后a变为2
            System.out.println(++a);//先++变为3然后输出
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    二:关系运算符:==!=<><=>=

    • 注意区分===
    • 关系运算符的结果只有两种可能truefalse
    • 不存在类似于a<b<c这样的操作
    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            int b = 2;
            System.out.println(a==b);
            System.out.println(a!=b);
            System.out.println(a<b);
            System.out.println(a>b);
            System.out.println(a<=b);
            System.out.println(a>=b);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    三:逻辑运算符:&&||

    (1)逻辑与:&&

    • &&左右两侧必须都是boolean类型

    • 规则为:遇假则假、全真则真
      在这里插入图片描述

    • 运算时从左到右依次判断,一旦某个表达式为false,则结果直接返回false,后续表达式不再执行(“短路”现象)

    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            int b = 2;
            System.out.println(a == 1 && b == 2);
            System.out.println(a == 1 && b > 100);
            System.out.println(a > 100 && b == 2);
            System.out.println(a > 100 && b > 100);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    短路现象

    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            int b = 2;
            System.out.println(((a > b) && ((19 / 0) == 0))); //a>b返回false,直接返回false,虽然后面除数为0,但是不执行
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    (2)逻辑或:||

    • ||左右两侧必须都是boolean类型
    • 规则为:遇真则真、全假则假
      在这里插入图片描述
    • 运算时从左到右依次判断,一旦某个表达式为true,则结果直接返回true,后续表达式不再执行(“短路”现象)
    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            int b = 2;
            System.out.println(a == 1 || b == 2);
            System.out.println(a == 1 || b > 100);
            System.out.println(a > 100 || b == 2);
            System.out.println(a > 100 || b > 100);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    短路现象

    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            int b = 2;
            System.out.println(((a < b) || ((19 / 0) == 0))); //a<b返回true,直接返回true,虽然后面除数为0,但是不执行
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    (3)逻辑非:!

    • !后面只能接布尔表达式,而不能像C语言一样出现类似于!1!0的操作
    • 规则为:真变假、假变真
      在这里插入图片描述
    public class TestDemo {
        public static void main(String[] args) {
            int a = 1;
            System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
            System.out.println(!(a != 1)); // a != 1 为false,取个非就是true
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    四:位运算符:&|^~

    关于位运算符这里就不详细展开了,只说一下具体规则。位运算符会针对比特位进行运算

    • 按位与(&:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
    • 按位或(|:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
    • 按位异或(^:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
    • 按位取反(^:如果该位为 0 则转为 1, 如果该位为 1 则转为 0

    五:移位运算符:<<>><<<

    public class TestDemo {
        public static void main(String[] args) {
            //左移
            int a = 0x10;
            System.out.printf("%x\n", a);
            System.out.printf("%x\n", a << 1);
            System.out.println("---------------------------------");
    
            //右移
            int b = 0x10;//正数
            System.out.printf("%x\n", b);
            System.out.printf("%x\n", b >> 1);
    
            int c = 0xffff0000;//负数
            System.out.printf("%x\n", c);
            System.out.printf("%x\n", c >> 1);
            System.out.println("---------------------------------");
    
    
            //无符号右移
            int d = 0xffffffff;//负数
            System.out.printf("%x\n", d);
            System.out.printf("%x\n", d >>> 1);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述

    六:条件运算符(三目运算符)

    • 格式为:表达式1?表达式2:表达式3
    public class TestDemo {
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            int max = a>b?a:b;
            System.out.println(max);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

  • 相关阅读:
    基于国产芯片RK1126的智能视频分析网关
    1.1 熟悉x64dbg调试器
    Redis 哨兵集群工作原理
    【libGDX】Mesh立方体贴图(6张图)
    自动化部署static资源到cos-bucket
    mongodb 性能优化
    拉格朗日松弛与拉格朗日分解 lagrangian relaxation
    K8s 之 节点亲和性的调度策略(NodeAffinity)
    PostgreSQL数据库常用方法
    100天精通Python(可视化篇)——第99天:Pyecharts绘制多种炫酷K线图参数说明+代码实战
  • 原文地址:https://blog.csdn.net/qq_39183034/article/details/125434199