• 【Java基础系列】运算符和类型转换


    1. 算数运算符

    算数运算符,即加减乘除余,以及自增和自减,Java的自动拆箱使得我们能够对包装类直接进行算数运算。

    Integer a = 1;
    Integer b = 2;
    System.out.println(a+b);
    //输出:3
    
    • 1
    • 2
    • 3
    • 4

    算数运算符很简单,但需要我们注意的是类型转换问题。考虑以下代码:


    int a = 1;
    short b = 2;
    short c = a+b;//编译不通过
    int c = a+b;//编译通过
    System.out.println(c);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    a是int型,b是short型,二者相加,会自动转化为范围更大的类型。


    int a = 1;
    short b = Short.MAX_VALUE;
    short c = (short) (a+b);
    System.out.println(c);
    //输出:-32768
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们可以通过强转的方式,将int转为short型,编译和执行不会报错,但是会导致不是期望的结果。以上c = (short) (a+b)超过了short所能表示的最大值,再强转后溢出,得到-32768(short的最小值)。


    double a = 1.123456789;
    float b = (float) a;
    System.out.println(b);
    //输出:1.1234568
    
    • 1
    • 2
    • 3
    • 4

    double 类型强转float后,导致精度丢失。


    int a = 1;
    short b = 2;
    b += a;//编译通过
    b = b + a;//编译失败
    System.out.println(b);
    //输出3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    b += a是自增运算,等价于b = b + a,但是b = b + a是编译不过的,b += a则会自动转型为左操作数对应的类型,也就是short类型


    😉 小技巧:再进行算数运算时,需要考虑null值情况,我们可以通过自己封装计算工具或者开源工具包来规避可能发生的异常,将null默认按0处理。

    2. 逻辑运算符

    Java的逻辑运算符有:且(&&),或(||),非(!
    逻辑运算符需要注意以下几点:

    • 优先级
      !的优先级最高,其次是&&,最后是||,当写复杂的逻辑判断时,需要注意其作用范围。
    • 注意&&||的短路性
      假设(条件1)&&(条件2),当条件1为false时,不会执行条件2的判断。如果条件2的判断是一个耗时操作,那么尽量把条件1放在前面,可以提高效率。

    一些小建议:

    • if条件中尽量避免写过于复杂的逻辑判断,如果复杂性不可避免,可以单独提取出变量或方法。
    • 简化判断条件,提高代码简洁性。
      考虑以下代码:
    if(a==1||a==2||a==3||a==4){}
    
    • 1

    可以改写为

    List<Integer> list = Arrays.asList(1,2,3,4);
    if(list.indexOf(a)>-1){}
    
    • 1
    • 2

    3. 关系运算符

    Java中的关系运算符有:大于(>)、小于(<)、等于(==),大于等于(>=),小于等于(<=),不等于(!=),其中,需要注意的是==,对于两个对象,它比较的是两个对象的内存地址;对于包装类型和基本类型,它比较的是拆箱后的值。

    4. 位运算符

    Java的位运算符有:与(&)、或(|)、非(~)、异或(^),左移(<<),右移(>>)、无符号右移(>>>)。

    byte a = 0B101;
    byte b = 0B010;
    System.out.println(a&b);
    System.out.println(a|b);
    System.out.println(~a);
    System.out.println(a^b);
    //输出:
    //0
    //7
    //-6
    //7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    机器视觉在虚拟现实与增强现实中的作用
    微信小程序发布一个npm包
    maven仓库改国内源
    获取dateTimePicker的数值
    uni-app 之 文字分两行显示超出用省略号表示
    47. 全排列 II
    你还不知道怎么使用Vuex?赶紧来看看吧!
    ST‐LINK V2 使用说明(安装,调试,烧录)
    最详细的CompletableFuture异步编程-进阶篇
    存储器概述
  • 原文地址:https://blog.csdn.net/wxgxgp/article/details/126932617