当前位置 博文首页 > RtxTitanV的博客:Java基础知识总结之运算符

    RtxTitanV的博客:Java基础知识总结之运算符

    作者:[db:作者] 时间:2021-07-07 10:08

    本文主要对Java的运算符进行简单总结。

    一、算术运算符

    运算符运算范例结果
    +正号+11
    -负号-11
    +2+35
    -5-23
    *2*510
    /10/25
    %取模5%32
    ++自增(前):先运算后取值a=2;b=++aa=3;b=3
    ++自增(后):先取值后运算a=2;b=a++a=3;b=2
    自减(前):先运算后取值a=2;b=–aa=1;b=1
    自减(后):先取值后运算a=2;b=a–a=1;b=2
    +字符串连接“Ja”+“va”“Java”

    注意:

    • /运算两个操作数都是整数时,为整数除法,否则,为浮点除法,例如15/2等于7,15.0/2等于7.5。整数/0将会产生一个异常,浮点数/0会得到无穷大或NAN。
    • %运算结果的符号和被模数相同。
    • 当String字符串与其他数据类型中间使用+号只能是做字符串连接运算,并且结果为String类型。

    二、赋值运算符

    运算符运算范例结果
    =赋值a=3,b=2a=3,b=2
    +=加赋值a=3,b=2,a+=ba=5,b=2
    -=减赋值a=3,b=2,a-=ba=1,b=2
    *=乘赋值a=3,b=2,a*=ba=6,b=2
    /=除赋值a=3,b=2,a/=ba=1,b=2
    %=取模赋值a=3,b=2,a%=ba=1,b=2
    >>=右移位赋值a=6,b=2,a>>=ba=1,b=2
    >>>=无符号右移位赋值a=3,b=1,a>>>=ba=1,b=1
    <<=左移位赋值a=3,b=2,a<<=ba=12,b=2
    &=按位与赋值a=6,b=3,a&=ba=2,b=3
    |=按位或赋值a=6,b=3,a|=ba=7,b=3
    ^=按位异或赋值a=6,b=3,a^=ba=5,b=3

    注意:如果复合赋值运算符得到一个值,其类型与左侧操作数类型不同,就会发生强制类型转换。例如x += 3.5;,如果x为int类型,则会将x设置为(int)(x + 3.5)

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

    运算符运算范例结果
    ==等于7=5false
    !=不等于7!=5true
    <小于7<5false
    >大于7>5true
    <=小于等于7<=5false
    >=大于等于7>=5true
    instanceof检查是否是类的对象“Hello” instanceof Stringtrue

    注意:

    • 比较运算符的结果都是布尔类型,要么为true,要么为false。
    • >、< 、>= 、<=只支持左右两边操作数是数值类型。
    • ==、 !=两边的操作数既可以是数值类型,也可以是引用类型。
    • 不要将关系运算符==写成=。

    四、逻辑运算符

    运算符运算范例结果
    &逻辑与false&truefalse
    |逻辑或false|truetrue
    ^逻辑异或true^falsetrue
    逻辑非!truefalse
    &&短路与false&&truefalse
    ||短路或false||truetrue

    运算法则如下:

    aba&ba|ba^b!aa&&ba||b
    truetruetruetruefalsefalsetruetrue
    truefalsefalsetruetruefalsefalsetrue
    falsetruefalsetruetruetruefalsetrue
    falsefalsefalsefalsefalsetruefalsefalse

    注意:

    • &与&&以及|与||的区别:
      • &:左边无论真假,右边都进行运算。
      • &&:如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
      • |:左边无论真假,右边都进行运算。
      • ||:如果左边为假,右边参与运算,如果左边为真,那么右边不参与运算。
    • 异或(^)与或(|)的不同之处是,当左右都为true时,结果为false。

    五、位运算符

    运算符运算范例结果
    <<左移位3<<212(3*22
    >>右移位6>>21(6/22
    >>>无符号右移位3>>>11(3/2)
    &按位与6&32
    |按位或6|37
    ^按位异或6^35
    ~按位非~6-7

    <<(左移):空位补0,被移除的高位丢弃,空缺位补0。3<<2运算过程如下:

    000000000000000000000000000000113
    000000000000000000000000000011左移2位
    00000000000000000000000000001100低位补0,结果为12

    <<的结果是乘以2的移动位数次幂。

    >>:被移位的二进制最高位是0,右移后空缺位补0,最高位是1,空缺位补1。6>>2运算过程如下:

    000000000000000000000000000001106
    000000000000000000000000000001右移2位
    00000000000000000000000000000001高位补0,结果为1

    >>的结果是除以2的移动位数次幂。

    >>>:被移位的二进制最高位无论是0还是1,空缺位都补0。-6>>>2运算过程如下:

    11111111111111111111111111111010-6
    111111111111111111111111111110右移2位
    00111111111111111111111111111110高位补0,结果为1073741822

    &:二进制位进行&运算,参与运算的两位都为1,结果才是1,否则为0。6&3运算过程如下:

    000000000000000000000000000001106
    000000000000000000000000000000113
    000000000000000000000000000000102

    |:二进制位进行|运算,参与运算的两位都为0,结果才是0,否则为1。6|3运算过程如下:

    000000000000000000000000000001106
    000000000000000000000000000000113
    000000000000000000000000000001117

    ^:二进制位进行^运算,参与运算的两位不同,结果才是1,否则为0。6^3运算过程如下:

    000000000000000000000000000001106
    000000000000000000000000000000113
    000000000000000000000000000001015

    ~:二进制只有1和0,参与运算的位如果是1,取反为0,如果为0,取反为1。~6运算过程如下:

    000000000000000000000000000001106
    11111111111111111111111111111001-7

    当参与取反的数值是正数时,结果为把对应的值加上负号再-1;当参与取反的数值是负数时,结果为把对应的值加上负号再-1。

    六、三元运算符(三目运算符)

    格式:condition?:expression1:expression2;
    condition为true,运算结果为expression1;条件表达式为false,运算结果为expression2。

    注意:

    • 表达式1与表达式2的类型必须一致。
    • 使用三元运算符的地方一定可以使用if…else代替,反之不一定成立。

    七、运算符优先级

    1
    表中优先级序号1的优先级最高,优先级序号14的优先级最低。使用优先级为1的小括号可以改变其他运算符的优先级。

    cs