第五章 Java运算符和表达式
定义:运算符是指具有运算功能的符号。参与运算的数据称为操作数。运算符和操作数按照一定的规则组成的式子称为表达式。
运算符的分类:
根据操作数个数不同分类:单目运算符(一元运算符)、双目运算符(二元运算符)、三目运算符(三元运算符)
根据性质或用途不同分类:算术运算符(+、-、*、/、%、++、--)、关系运算符(>、<、>=、<=、= =、!=)、逻辑运算符(!、&&、||)、位运算符(>>、<<、>>>、&、|、∧、~)、赋值运算符(=、+=、—=、*=、/=、%=等)、条件运算符(?和:成对使用)
算术运算符与算术表达式
分类 | 运算符 | 名称 | 示例 | 描述 |
双 目 运 算 符 | + | 加法 | A+B | A加B |
- | 减法 | A-B | A减B | |
* | 乘法 | A*B | A乘以B | |
/ | 除法 | A/B | A除以B | |
% | 取余运算 | A%B | A除以B取余数 | |
单 目 运 算 符 | + | 正号 | +A | 正A |
- | 负号 | -A | 负A | |
++ | 自增 | ++A,A++ | A自加1 | |
-- | 自减 | --A,A-- | A自减1 |
整型数据在进行除法(/)运算时,结果只保留值的整数部分。
单目运算符中的自增和自减运算符位于操作数左侧和右侧是不同的。二者区别:位于左侧时,操作数先自增或自减 1后再使用操作数;位于右侧时,先使用操作数,再使操作数自增或自减1。
关系运算符与关系表达式
运算符 | 名称 | 示例 | 描述 | |
== | 等于 | A==B | A等于B吗 | |
!= | 不等于 | A!=B | A不等于B吗 | |
> | 大于 | A>B | A大于B吗 | |
< | 小于 | A<B | A小于B吗 | |
>= | 大于等于 | A>=B | A大于等于B吗 | |
<= | 小于等于 | A<=B | A小于等于B吗 |
关系表达式的运算次序是先分别算出运算符两侧的值,再把二者作比较。
字符型数据按其在Unicode标准字符集中的位置值进行比较。常见字符的位置值由小到大顺序是:空格<'0'<... <'9'<'A'<...<'Z'<'a'<...<"z"<任何汉字。
逻辑运算符
运算符 | 名称 | 示例 | 描述 | |
! | 逻辑非 | !A | A为true时结果为false,A为false时结果为true | |
&& | 逻辑与 | A&&B | A、B同为true时结果为true,否则为false | |
|| | 逻辑或 | A||B | A、B同为false时结果为false,否则为true | |
∧ | 逻辑异或 | A∧B | A、B同为true或同为false时结果为false,否则结果为true |
“&&”和“||”又称为“短路与”和“短路或”。如果“&&”左边表达式值为false,则整个表达式的值为false, 编译器不再运算右边的表达式。同样,如果“||”左边的表达式值为true,则整个表达式的值为true,编译器不 再运算右边的表达式。
赋值运算符:Java中的“=”表示的是赋值运算符,不同于数学中的等号(Java中表示等于的运算符是用两个连在 一起的等号(“==”)表示)。例如表达式 A+=B 表示 A=A+B,意思是A加B后的值赋值给A。
位运算符:Java中提供了可以直接对二进制数进行操作的位运算符。“~”表示按位取反,“&”表示按位与运 算,“|”表示按位或运算,“∧”按位异或,“<<”左移,“>>”带符号右移,“>>>”无符号右移。
计算机系统中为了便于对数值进行处理,数值一律用补码表示。其中,正数的补码与原码相同,符号位为0,例如 +9的补码为00001001;负数的补码为:符号位为1,其余位数该数绝对值的原码按位取反,然后整个数加1。例如: 对于-7来说,符号位为1,+7的原码为0000111(除去符号位,剩下7位),取反后得到1111000,加1得到1111001, 则-7的补码为11111001。
在不溢出的情况下,左移运算相当于乘运算,左移n位相当于该操作数乘以2的n次方;右移运算相当于除运算,右 移n位相当于该操作数除以2的n次方。
条件运算符:expression1?expression12:expression13;
表达式expression1的值必须为布尔型,表达式expression12和expression13的值可以为任意类 型,且类型可以不同。
条件表达式的值取决于expression1的判断结果,如果expression1结果为true,则执行表达式2, 否则执行表达式3。