当前位置:课程学习>>第三章 运算符与流程控制>>文本学习>>知识点一
一.算术运算符
算术运算符用在算术表达式中,实现算术运算,Java中的算术运算符和其他语言中的算术运算符完全相同,一共有以下8个运算符,括号内为具体含义:
-(取负)、++(自加或自增)、――(自减)、*(乘)、/(除)、%(求余或取模)、+(加)、-(减)。
其中-(取负)、++、――为一元运算符(或叫单目运算符),只需要一个操作数就可以。其余均为二元运算符,需要两个操作数。
算术运算符只能操作整型数、浮点数以及字符,不能用在布尔类型数之间。
利用除法/运算符进行算术运算时需要注意操作数的类型,如果两个操作数均为整型数,则结果也为整型数,若有一个为浮点型,则结果就为浮点型。
【例3.1】除法运算符/的用法。
1 //ArithmeticOperatorUsage.java
2 public class ArithmeticOperatorUsage
3 {
4 public static void main(String[] args)
5 {
6 System.out.println(5/2);
7 System.out.println(5/2.0);
8 System.out.println(5.0/2);
9 }
10 }
程序运行的结果为:
2
2.5
2.5
求余运算符%不仅可以对整型数进行运算,也可以对浮点型数进行运算,不过需要注意结果。
【例3.2】求余运算符%的用法。
//ArithmeticRemainderOperator.java
public class ArithmeticRemainderOperator
{
public static void main(String[] args)
{
int a=35;
double b=35.872;
System.out.println(a%10);
System.out.println(b%10);
}
}
程序运行的结果为:
5
5.872
在进行算术运算时还应该注意运算结果是否溢出,特别是进行乘法运算时。
++、――运算符可以放在变量前面,也可以放在变量的后面使用,对变量本身没有任何影响,变量都会在原来值的基础上加1或减1,但对变量所在的表达式的运算结果有影响。
【例3.3】自增运算符++的用法。
1 //ArithmeticPlusOperator.java
2 public class ArithmeticPlusOperator
3 {
4 public static void main(String[] args)
5 {
6 int x=2;
7 int y;
8 y=(++x)*3;
9 System.out.println("x="+x+",y="+y);
10 x=2;
11 y=(x++)*3;
12 System.out.println("x="+x+",y="+y);
13 }
14 }
程序的运行结果为:
x=3,y=9
x=3,y=6
二、关系运算符
关系运算符也叫比较运算符是用来对两个操作数进行大小或者是否相等的比较,返回的是boolean类型的值true或false。运算符包括:
>(大于)
<(小于)
>=(大于等于)
<=(小于等于)
== (等于)
!=(不等于)
Java中的任何类型,包括整数,浮点数,字符,以及布尔数都可用“==”来比较是否相等,用“!=”来测试是否不等。只有整数、浮点数和字符数可以用来比较大小。
三、 逻辑运算符
逻辑运算符包括:&&(与)、||(或)、^(异或)、!(非)
!运算符为一元运算符,其余为二元运算符。逻辑运算符只能对布尔类型的数进行运算,不能对其他类型的数据进行运算,其运算结果只能是true或false。具体运算规则如表3.1所示。
表3.1 逻辑运算符的运算规则
Op1 |
Op2 |
Op1 && Op2 |
Op1 || Op2 |
Op1 ^ Op2 |
!Op1 |
true |
true |
true |
true |
false |
false |
true |
false |
false |
true |
true |
|
false |
true |
false |
true |
true |
true |
false |
false |
false |
false |
false |
多个表达式在进行逻辑运算时,只要有一个表达式为false,则逻辑与(&&)的结果就一定为false,不管其他表达式的值是true还是false。同样若有一个表达式为true,则进行逻辑或(||)的结果就一定为true,而不管其他表达式的值是true还是false。因此在实际计算时遇到这种情况就不会去计算剩下的其他表达式了,这种现象称之为
“短路”现象。
【例3.4】逻辑与(&&)运算中“短路”现象。
1 //ShortCircuit.java
2 public class ShortCircuit
3 {
4 public static void main(String[] args)
5 {
6 int n=3;
7 int m=4;
8 boolean f;
9 f=(n>m)&&(++n)>=m;
10 System.out.println("f="+f+",n="+n);
11 }
12 }
程序的运行结果为:
f=false,n=3
四、位、移位运算符
1. 位运算符
Java定义的位运算直接对整数类型的位进行操作,这些类型包括long、int、short、char、byte,位运算符有:&(按位与)、|(按位或)、^(按位异或)、~(按位非)
位运算符的运算规则和逻辑运算符基本相似,如表3.2。
表3.2 位运算符的运算规则
Op1 |
Op2 |
Op1 & Op2 |
Op1 |Op2 |
Op1 ^ Op2 |
~Op1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
|
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
若进行位逻辑运算的两个操作数的数据长度不相同,则返回值应该是数据长度较长的数据类型。
2. 移位运算符
移位运算符有:<<(左移)、>>(右移)、>>>(无符号右移)
>>>和>>的区别是:在执行运算时,>>>运算符的操作数高位补0,而>>运算符的操作数高位移入原来高位的值。
右移一位相当于除以2,左移一位(在不溢出的情况下)相当于乘以2;移位运算速度高于乘除运算。
在Java中位运算符和移位运算符一般使用的较少。
五、 其他运算符
除了上面介绍的运算符外,Java中还有一些其他运算符。
(1) 赋值运算符和扩展赋值运算符
赋值运算符=可以和其他运算符结合起来构成扩展赋值运算符,如:+=(加赋值)、-=(减赋值)、*=(乘赋值)、/=(除赋值)、%=(求余赋值)、&=(按位与赋值)、|=(按位或赋值)、^=(按位异或赋值)、<<=(左移赋值)、>>=(右移赋值)、>>>=(无符号右移赋值)。
扩展赋值运算符使得表达式更为简捷,例如:a+=4,实际上和a=a+4是等价的。
(2) 条件运算符:? :
Java提供一个特别的三元运算符经常用于取代if-then-else 语句。这个运算符就是? :,并且它在Java中的用法和在C/C++中的几乎一样。?:运算符的通用格式如下:
expression1 ? expression2 : expression3
实际上相当于:
if (expression1)
expression2;
else
expression3;
其中,expression1是一个布尔表达式。如果expression1为真,那么就取expression2的值;否则就取expression3的值。整个?:表达式的值就是被求值表达式(expression2或expression3)的值。expression2和expression3是除了void以外的任何类型的表达式,且它们的类型必须相同。
(3) 字符串连接符:+
如果+两边的操作数有一个为字符串,那么+就起连接作用,形成新的字符串。
(4) 实例运算符instanceof
instanceof运算符可以用来判断一个对象是否属于某个类的实例。用法为:
对象名 instanceof 类名
如果该对象是该类的实例或该类子类的实例,返回true值,否则返回false。
此外还有下标运算符[]、分量运算符.、内存分配运算符new等。
多个运算符在一起运算时,要看运算符的优先级来决定运算的先后次序。Java中的运算符的优先级如表3.3所示。
表3.3 Java运算符的优先级
运算符 |
优先级 |
. [ ] () |
最高 |
++ -- - ! ~ instanceof |
优先级从上到下逐渐降低,其中赋值和扩展赋值均是从右到左结合 |
new (类型) |
|
* / % |
|
+ - |
|
>> >>> << |
|
> >= < <= |
|
== != |
|
& |
|
^ |
|
| |
|
&& |
|
|| |
|
?: |
|
= |
|
+= -= *= /= %= |
|
&= |= <<= >>= >>>= |
最低 |