首页 > 代码库 > 运算符与表达式
运算符与表达式
运算符
运算符就是用来对操作数进行运算的符号。java 中的运算符,基本上可以分为算数运算符、关系运算符、逻辑运算符、赋值运算符、位运算符和条件运算符等。
1.算术运算符
算术运算符主要用在数学表达式中,java 语言主要定义了“+”、“-”、“*”、“/”和“%” 5个双目运算符,“++”、“--”和“-” 3个单目运算符。java 语言提供运算符见下表:
算术运算符 | 含义 | 用法 | 示例 |
+ | 加法 | op1+op2 | a+b |
- | 减法 | op1-op2 | a-b |
* | 乘法 | op1*op2 | a*b |
/ | 除法 | op1/op2 | a/b |
% | 模运算 | op1%op2 | a%b |
++ | 自增运算 | op1++或++op1 | a++ ; ++a |
-- | 自减运算 | op1--或--op1 | a-- ; --a |
- | 取反运算 | -op1 | -a |
代码示例:
1 public class Test{ 2 public static void main(String[] args){ 3 int a=5; 4 boolean b = true; 5 char c = ‘a‘; 6 //int r1 = a+b;算术运算符不能用在布尔类型上,编译出错 7 int r2 = a+c; 8 System.out.println("a+c="+r2); 9 } 10 }
注:算术运算符可以用在char类型上,在java 中,实际是把char类型看作是 int 类型的一个子集。
整型除法总是返回整数作为商,其结果四舍五入到个位,即使其结果存储在浮点型的变量中也是如此。
一个整数除以零,则会产生一个被0除异常(编译通过,运行时异常)。
当一个证浮点型数除以0时,会产生一个正无穷大的值Infinity,当一个负浮点型数除以0时,会产生一个负无穷大的值-Infinity。
java 中对于取余操作,其操作数 可以是浮点型。在浮点数求余运算时,如果是被除数为0,则结果为NaN,表示不知道是什么结果。
2.关系运算符
关系运算符用来比较两个值的大小关系,其运算结果是个布尔型值:true 或 false 。java 语言提供的关系运算符都是双目运算符,见下表:
运算符 | 含义 | 用法 | 返回结果 |
> | 大于 | op1>op2 | 若op1大于op2,则结果为true,否则为false |
>= | 大于等于 | op1>=op2 | 若op1大于或等于op2,则结果为true,否则为false |
< | 小于 | op1<op2 | 若op1小于op2,则结果为true,否则为false |
<= | 小于等于 | op1<=op2 | 若op1小于或等于op2,则结果为true,否则为false |
== | 等于 | op1==op2 | 若op1等于op2,则结果为true,否则为false |
!= | 不等于 | op1!=op2 | 若op1不等于op2,则结果为true,否则为false |
注:关系运算符的结果返回true 或 false ,而不是C/C++的数字 1 或 0 。
3.逻辑运算符
逻辑运算符主要是用来实现布尔型数据“与”、“或”和“非”运算,运算结果仍然是布尔型数据。其中,“与”和“或”是双目运算符,“非”是单目运算符。如下表:
运算符 | 含义 | 用法 | 返回结果 |
&& | 逻辑与 | op1&&op2 | op1,op2都true时结果才为true |
|| | 逻辑或 | op1 || op2 | op1,op2都false时结果才为false |
! | 逻辑非 | ! op1 | op1为true时结果为false,op1为false时结果为true |
4.赋值运算符
赋值运算符是双目运算符,其作用是为变量赋值。java 中的赋值运算符有两种:普通赋值运算符和扩展赋值运算符。普通赋值运算符“=”的 左边是变量,右边是表达式。扩展赋值运算符可以看做是相应的二元运算与赋值运算的结合,主要包括“+=”、“-=”、“*=”、“/=”、“%=”、“&=”、“|=”等。
扩展赋值运算符有两个好处。第一,比标准的等式要紧凑。第二,有助于提高java的运算效率。
5.位运算符
位运算主要是将整数操作数转换成二进制数据,然后在进行按位比较和移位运算,见表:
运算符 | 用法 | 描述 |
& | op1 & op2 | 按位与:若两位都为1,则为1,否则为0 |
| | op1| op2 | 按位或:若两位之一为1 或都为1则为1,否则为0 |
^ | op1 ^ op2 | 按位异或:当且仅当其中一位为1时为1,否则为0 |
~ | ~op | 按位取反:1变为0,0变为1 |
>> | op1 >> op2 | 将op1 中所有二进制位向右移动op2位,左侧用符号位填充 |
<< | op1 << op2 | 将op1 中所有二进制位向左移动op2位,右侧用0填充 |
>>> | Op1 >>> op2 | 将op1 中所有二进制位向右移动op2位,左侧用0填充 |
6.条件运算符
条件运算符“?:” 是唯一一个三目运算符,其具体语法格式如下:
表达式1?表达式2:表达式3;
先求解表达式1,若其值为TRUE ,则将表达式2 的值作为整个表达式的取值,否则将表达式3的值作为整个表达式的取值。
7.其它运算符
除了上面介绍的几类运算符,java还支持以下几类运算符。
(1)强制类型转换运算符“type” :将某一种类型的值转换为type类型。
(2)下标运算符“[]”:用于数组的声明、创建和访问数组元素。
(3)分量运算符“.”:用于访问实例对象的成员。
(4)动态内存分配运算符“new”:创建新对象。
(5)instanceof:是一个二元操作符,测试它左边的对象是否是它右边的类的实例,返回布尔类型数据。
表达式
表达式是由运算符与操作数组组成的式子。操作数包括常量、变量、方法和其他名字的标识符。一个常量或变量是最简单的表达式。
表达式主要用来进行计算的,并返回计算结果。在java中,表达式主要有以下几种:算术表达式、关系表达式、逻辑表达式和赋值表达式。
优先级 | 运算符 | 结合性 |
1 | 。[] () | 从左向右 |
2 | +(单目运算取正) -(单目运算取负) ~ ! ++ -- (type) new | 从右向左 |
3 | */% | 从左向右 |
4 | + - | 从左向右 |
5 | >> << >>> | 从左向右 |
6 | < <= > >= instanceof | 从左向右 |
7 | == != | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?: | 从右向左 |
14 | = += *= /= -= %= ^= &== |= >>= <<= >>>= | 从右向左 |
运算符与表达式