首页 > 代码库 > 运算符与表达式

运算符与表达式


运算符

  运算符就是用来对操作数进行运算的符号。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 =  +=  *=  /=  -= %=  ^=  &== |=  >>=  <<=  >>>= 从右向左

 

运算符与表达式