算术混合运算的精度
精度从“低”到“高”排列的顺序是:
byte short char int long float double
运算精度规则:
- 如果表达式中有双精度浮点数(double型数据),则按双精度进行运算。
- 如果表达式中最高精度是单精度浮点数(float型数据),则按单精度进行运算,
- 如果表达式中最高精度是long型整数,则按long精度进行运算。
- 如果表达式中最高精度低于int型整数,则按int精度进行运算。
- Java允许把不超出byte、short和char的取值范围的算术表达式的值赋给byte、short和char型变量。
关系运算符与关系表达式
运算符 | |
---|---|
只能用于数值类型 | > < >= <= |
可用于所有数据类型 | == != |
逻辑运算符与逻辑表达式
运算符 | 用法 | 含义 | |
---|---|---|---|
&& | op1&&op2 | 逻辑与 | 同真才真 |
|| | op1||op2 | 逻辑或 | 有真则真 |
! | !op | 逻辑非 | 取反 |
逻辑运算符的操作元必须是boolean型数据。
逻辑运算符&&和||也称作短路逻辑运算符,即当op1的值为false时&&无需再计算op2的值,直接得出 op1&&op2 结果为false;当op1的值为true时,直接得出 op1||op2 结果为true。
位运算符
整型数据在内存中以二进制的形式表示,左边最高位是符号位,最高位是0表示正数,是1表示负数。负数采用补码表示。
运算符 | 用法 | |
---|---|---|
按位与运算(二目) | a&b | 同1才1 |
按位或运算(二目) | a|b | 有1则1 |
按位非运算(单目) | a~b | 取反 |
按位异或运算(二目) | a^b | 同则0,异则1 |
由异或运算法则:a^a=0, a^0=a, ^的逆运算仍是^, 则a^b^b=a。
位运算符也可以操作逻辑型数据,但a和b的值需都知道才能得出结果,费时。
instanceof运算符
该运算符是二目运算符,左边的操作元是一个对象,右边是一个类。当左面的对象是右面的类或子类创建的对象时,该运算符运算的结果是true,否则是false。
运算符的优先性和结合性
优先级 | 描述 | 运算符 | 结合性 |
---|---|---|---|
1 | 分隔符 | [ ] ( ) . , ; | |
2 | 对象归类,自增自减运算,逻辑非 | instanceof ++ -- ! | 右到左 |
3 | 算术乘除运算 | * / % | 左到右 |
4 | 算术加减运算 | + - | 左到右 |
5 | 移位运算 | >> << >>> | 左到右 |
6 | 大小关系运算 | < <= > >= | 左到右 |
7 | 相等关系运算 | == != | 左到右 |
8 | 按位与运算 | & | 左到右 |
9 | 按位异或运算 | ^ | 左到右 |
10 | 按位或 | | | 左到右 |
11 | 逻辑与运算 | && | 左到右 |
12 | 逻辑或运算 | || | 左到右 |
13 | 三目条件运算 | ? : | 左到右 |
14 | 赋值运算 | = | 右到左 |