数值数据类型的操作符包括标准的算术操作符:加号(+
)、减号(-
)、乘号(*
)、除号(/
)和求余号(%
),操作数
是被操作符操作的值。
运算符 | 名字 | 示例 | 运算结果 |
---|---|---|---|
+ | 加 | 34 + 1 | 35 |
- | 减 | 34.0-0.1 | 33.9 |
* | 乘 | 300 * 30 | 9000 |
/ | 除 | 1.0 / 2.0 | 0.5 |
% | 求余 | 20 %3 | 2 |
%
, 被称为求余或者取模操作符,可以求得除法的余数。左边的操作数是被除数。操作符 %
通常用在正整数上,实际上,它也可用于负整数和浮点值。只有当被除数是负数时,余数才是负的。+
和 -
可以是一元的也可以是二元的。一元操作符仅有一个操作数;而二元操作符有两个操作数。1.赋值运算符
在 Java 中,将等号(=
)作为赋值操作符(assignment operator)。
variable = expression;
2.结合赋值运算符
操作符 +
、-
、*
、/
、%
可以结合賦值操作符形成增强操作符。
作符 | 名称 | 示例 | 等价于 |
---|---|---|---|
+= | 加法赋值操作符 | i+=8 | i =i+8 |
-= | 减法赋值操作符 | i-=8 | i=i-8 |
*= | 乘法赋值操作符 | i*=8 | i=i*8 |
/= | 除法赋值操作符 | i/=8 | i=i/8 |
%= | 求余赋值操作符 | i% = 8 | i = i %8 |
自增操作符(++
) 和自减操作符(--
) 是对变量进行加 1 和减 1 的操作。
操作符 | 名称 | 说明 |
---|---|---|
++var | 前缀自增运算符 | 变量 var 的值加1且使用 var 增加后的新值 |
var++ | 后缀自增运算符 | 变置 var 的值加1但使用 var 原来的值 |
–var | 前缀自减运算符 | 变量 var 的值减1且使用 var 减少后的新值 |
var– | 后缀自减运算符 | 变置 var 的值减1但使用 var 原来的值 |
使用自增操作符和自减操作符可以使表达式更加简短,但也会使它们比较复杂且难以读懂。应该避免在同一个表达式中使用这些操作符修改多个变量或多次修改同一个变量。
Java运算符 | 数学符号 | 名称 |
---|---|---|
< | < < < | 小于 |
<= | ⩽ \leqslant ⩽ | 小于等于 |
> | > > > | 大于 |
<= | ⩾ \geqslant ⩾ | 大于等于 |
== | = = = | 等于 |
!= | ≠ \not = = | 不等于 |
逻辑操作符( logical operator ) 也称为布尔操作符(boolean operator), 是对布尔值进行的运算,创建新的布尔值。
操作符 | 名称 | 说明 |
---|---|---|
! | 非 | 逻辑非 |
&& | 与 | 逻辑与 |
|| | 或 | 逻辑或 |
^ | 异或 | 逻辑异或 |
&&
和||
被称为短路或者懒惰操作符:
如果操作符&&的操作数之一为 false, 那么表达式就是 false;如果操作符||的操作数之一为 true, 那么表达式就是 true。
- 当计算 p1&&p2 时,Java 先计算 p1, 如果 p1 为 true 再计算 p2; 如果 p1 为 false, 则不再计算p2。
- 当计算 p1||p2时,Java 先计算 p1, 如果 p1为 false 再计算 p2;如果 p1为 true, 则不再计算 P2
用机器语言编写程序,经常要直接处理二进制数值,并在位级别上执行操作。Java 提供了位操作符和移位操作符:
位操作符 | 名称 | 描述 |
---|---|---|
& | 按位与 | 两个相应位上的比特如果都为1,则执行与搡作会得到 1 |
| | 按位或 | 两个相应位上的比特如果其中有一个为 1 , 则执行或操作会得到1 |
^ | 按位异或 | 两个相应位上的比特如果相异,则执行与或操作会得到 1 |
~ | 按位求反 | 操作符将每个比特从 0 到 1 或者从 1 到 0进行转换 |
<< | 左移位 | 操作符将其左边的操作数按照第二个操作数指定的位移数进行左移位,右边空出来的补 0 |
>> | (带符号)右移位 | 操作符将其第一个操作数按照第二个操作数指定的位移数进行右移位,最高位补上符号位 |
>>> | (无符号)右移位 | 操作符将其第一个操作数按照第二个操作数指定的位移数进行右移位,左边空出来的补 0 |
condition ? expression1 : expresszon2
如果条件为 true,就为第一个表达式的值,否则计算为第二个表达式的值。
操作符按照优先级递减的顺序从上到下列出。同一栏中的操作符优先级相同,它们的结合方向如表中所示:
Java可以将一个数值赋给支持更大数值范围类型的变量,例如,可以将 long 型的值赋给 float型变量。但是,如果不进行类型转换,就不能将一个值赋给范围较小类型的变量。类型转换是一种将一种数据类型的值转换成另一种数据类型的操作。将一个小范围类型的变量转换为大范围类型的变量称为拓宽类型( widening a type ), 把大范围类型的变量转换为小范围类型的变量称为缩窄类型( narrowing a type)。Java 将自动拓宽一个类型,但缩窄类型必须显式完成。
在下图中有6个实心箭头,表示无信息丢失的转换 ;3个虚箭头,表示可能有精度损失的转换。
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名:
(type) variable