• 【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
  • 相关阅读:
    【Pytorch深度学习实战】(5)卷积神经网络(CNN)
    ping&icmp
    ES6展开运算符—— 通俗易懂
    简单工厂模式( Simple Factory Pattern )
    Python最常用的库
    低代码助力企业数字化升级
    设计模式:策略模式
    CPP emplace_bake 和 push_back 的相同和区别
    Elasticsearch笔记基础入门
    win10家庭版安装docker desktop问题
  • 原文地址:https://blog.csdn.net/wxgxgp/article/details/126932617