运算符

运算符用于连接值,java提供了一组丰富的算术和逻辑运算以及数学函数。

算术运算符

算术运算符有:+ – * / %。

整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。

整型溢出不会产生错误。

public class IntSty {
    public static void main (String [] args) {
        int n = 2147483647;
        int m = 1;
        int k = n + m;
        System.out.println(k);  // -2147483648
    }
} 

数学函数与常量

在Math类中年,包含了各种各样的数学函数。如计算幂,平方根,绝对值等。

public class IntSty {
    public static void main (String [] args) {
        int n = 4;
        int m = -3;

        System.out.println(Math.sqrt(n) * Math.abs(m));
        System.out.println(Math.pow(2,3));
    }
}

Math类中有两个常量Math.PI和Math.E。

结构赋值和运算符

可以在赋值中使用二元运算符,例如x +=4 等价于 x = x + 4;

如果运算符得到一个值,其类型与左操作数的类型不同,就会发生强制类型转换为左操作数的类型。

x +=3.5; ==> x = (int) (x + 3.5)

自增自减运算符

和php中一致

关系和boolean运算符

java中有

  • <
  • >
  • <=
  • >=
  • ==
  • ||
  • &&
  • !

这些运算符的返回值都是bool类型。

java中也有三元运算符 cond ? exp1 : exp2。如 x < y ? x : y将获得x和y中较小的那个数。

位运算符

位运算符有四种:

  • &
  • |
  • ~
  • ^

注意 a & b 与 a && b的返回结果一致,但是注意&&具有短路特性。同理a | b、 a || b也是一样。

除此之外,还有>>和<<将位进行右移或左移。java还有一个独特的>>>运算符。它和>>不同的是,>>用符号位填充高位,而>>>只会用0填充高位。

移位运算符的右操作数要完成模32的运算,比如:x >> 35 等同 x >> 3.

运算符优先级