TIJ3
在最底层,java中的数据是通过使用操作符来操作的。
java中的操作符,和C++中差不多。一个表达式可能有多个操作符,操作符连接操作数,按照优先级进行计算,一般是先乘除后加减,有括号先算括号。
操作符分类:
- 算术操作符
- 逻辑和关系操作符
- 位操作符
- 混合赋值
- 类型转换
几乎所有的操作符只能作用于,基本类型,结合基本类型来看一下这些操作符。
算术操作符
操作符包括,+、-、*、/、%、、++、–、= 、一元(-)、一元(+)
符号 | 算术 |
---|---|
int | 都可以 |
short/byte/short | 运算结果会自动提升 |
long | 都可以 |
float/double | 都可以(可以%、++、–) |
boolean | 不可以 |
关系和逻辑
> 、<、>=、<=、==、!=、&&、||、!
符号 | 关系与逻辑 |
---|---|
int | 不可以逻辑运算 |
short/byte/short | 不可以逻辑运算 |
long | 不可以逻辑运算 |
float/double | 不可以逻辑运算 |
boolean | 不可以比较大小 |
位操作符
| 、&、~、^、>>、<<、<<<、>>>(无符号右移,负数的时候补0)
符号 | 位操作 |
---|---|
int | 都可以 |
short/byte/short | 都可以,会提升类型,需要cast回来 |
long | 都可以 |
float/double | 不可以 |
boolean | 不可以 |
混合赋值
+=、-=、*=、/=、%=、>>=、<<=、>>>=、<<<=
符号 | 混合 |
---|---|
int | 都可以 |
short/byte/short | 都可以 |
long | 都可以 |
float/double | 不可以位运算相关 |
boolean | 不可以 |
类型转换
转换成其他类型
符号 | 转换 |
---|---|
int | 不能转成bool |
short/byte/short | 不能转成bool |
long | 不能转成bool |
float/double | 不能转成bool |
boolean | 不能转换 |
综上
- boolean基本只能做逻辑运算;其他符号不能直接做逻辑运算。
- 所有算术运算、位运算(除了++、–)都会引起类型提升,混合赋值不会引起类型提升。
- float/double可以%运算,不可以位运算
- 类型转换,除了boolean,都可以互相转换。widenning conversion和 narrow conversion,窄化转换会有丢失信息的风险。
其他要点:
对象可以进行 ==、!=的运算,但是会直接比较引用,建议采用equals,但是需要将它实现。
关于String进行比较的例子 http://www.cnblogs.com/tinyphp/p/3768214.html
double/float转换成int/long类型是,会直接截尾,Math.round可以四舍五入。