Java运算符
在Java中,运算符可以分为以下四组:
算术运算符
位运算符
关系运算符
逻辑运算符
算术运算符
运算符 结果
+ 加
- 减
* 乘
/ 除
% 取模
++ 递增运算
-- 递减运算
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 取模赋值
算术运算符的操作数必须是数字类型的,即可以是(byte,short,int,long,float,double,char),不能在boolean类型上使用他们. char类型实质上是int类型的一个子集.
基本算术运算符(加,减,乘,除)可以对所有的数字类型操作,减号运算符可用于对它的操作数取负数,除法运算符应用到整形时,结果中将不包括小数部分.请看示例 BasicMath.java
模运算符
模运算符%返回一个除法操作的余数,它可以应用于浮点类型和整型,请看示例Modulus.java.
算术赋值运算符
Java提供了特殊的算术运算符,用来组合一个算术运算符和一个赋值,比如,像下面的这样的语句在编程过程中是很常见的:
+=
a = a + 4;
在Java中,可以改写这条语句,如下所示:
a += 4;
改写后的语句是使用+=赋值运算符,两条语句执行同样的操作: 使a的值增加4.
%=
a = a % 2;
可以表示为
a %= 2;
在这个例子中,%=获得a/2的余数,并把结果重新赋值给a.
赋值运算符有两个优点,首先,节省输入,因为它们是与较长形式等同的简写. 第二,与较长形式相比,Java运行时系统实现赋值运算符的效率更高.因此,在专业人员编写的Java程序中,经常会看到这种赋值运算符.请看示例OpEquals.java
递增和递减运算符
++和—是Java的递增和递减运算符,它们具有一些特殊的属性.
递增运算符将其操作数增1,递减运算符将其操作数减1,例如下面这条语句:
x = x + 1;
可以使用递增运算符重新改写为:
x++;
同样,下面的语句:
x = x – 1;
等同于
x--;
递增,递减运算符有前缀,后缀之分,在大多数表达式中使用递增或递减运算符时,这两种形式就会有较大的区别,在前缀形式中,Java会在获得该操作数的值之前执行增1或减1操作,然后将其用于表达式中,在后缀形式中,Java会在表达式中使用先前的值,然后再修改操作数.例如:
x = 42;
y = ++x;
在这个例子中,y将被设置为43,因为在x被赋给y以前增1,因而,y=++x这一行代码等价于下面的两条语句:
x = x + 1;
y = x;
如果按下面的方式书写时:
x = 42;
y = x++;
这里,会在表达式中使用先前的值,在递增运算符执行之前获得x的值,所以y的值是42.当然,最后x的都会被设置为43. 此时,y = x++;等价于下面的这两条语句:
y = x;
x = x + 1;
请看示例IncDec.java
结论:
++x 表示在x参与其他运算之前先自增1
x++ 表示在x参与其他运算之后先自增1
--x 表示在x参与其他运算之前自减1
x—表示在x参与其他去处之后自减1.
关系运算符
关系运算符表示一个操作数与另一个操作数之间的关系,特别是相等和排列次序关系.关系运算符如下表所示:
运算符 意义
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
这些运算的结果是一个boolean值,关系运算符常用在if语句和循环语句的表达式中.
Java中的任何类型,包括整型,浮点型,字符型,布尔型,都可以使用符号”==”来比较是否相等.用符号!=来测试是否不等,注意,相等用两个等号表示,而不是一个(记住,一个等号表示赋值运算符).Java中,只有数字类型可以使用排序运算符进行比较,也就是只有整数,浮点,字符型操作数比较哪个大哪个小.
因为由关系运算符产生的结果是一个boolean值,所以下面的代码片段是完全有效的:
int a = 4;
int b = 1;
Boolean c = a < b;
在这个例子中,a<b的结果(false)被存储在c中.
请看示例EqualDemo.java
CmpDemo.java
逻辑运算符(布尔逻辑运算符)
逻辑运算符的操作数只能是boolean型,所有的二进制逻辑运算符都是把两个boolean值组合在一起,形成一个布尔值结果.
运算符 意义
& 逻辑与
| 逻辑或
^ 逻辑异或
|| 短路或
&& 短路与
! 逻辑非
&= 逻辑与赋值
|= 逻辑或赋值
^= 异或赋值
== 等于
!= 不等于
“!” 表示逻辑非(也叫取反运算符),运算符右边表达式的值为false时,结果为true,否则结果为false.
例如:
boolean a = true;
boolean b = (!a); //取反后,b=false
“&”表示逻辑与,只有当运算符两边表达式的值都为true时,结果才为true,否则结果为false
“|”表示逻辑或,只要运算符两边表达式的值为一个为true,则结果为true,否则结果为false
“^”表示逻辑异或,只有运算符两边表达式的值不相同时(一个为true,另一个为false),结果才为true,否则结果为false.
“&&” 表示短路与,当运算符第一个表达式值为false时,就不对运算符右边表达式的值进行判断,其他用法与&相同.
“||” 表示短路或,当运算符第一个表达式值为true时,就不对运算符右边表达式的值进行判断,其它用法与”|”相同.
请看示例BoolLogic.java
短路运算符”&&” “||”,先判断其前面第一个子表达式的值,如果第一个表达式的值就可以确定整个表达式的值,程序就不会再去运算其他子表达式,这显示可以提高程序的效率.请看示例
ShortCircuit.java
DenomDemo.java
三元运算符 (? :)
它相当于分支语句 if – else
Exp1 ? Exp2 : Exp3
Exp1 表示一个布尔表达式,其值只能为true或false
Exp2 表示任何一个表达式.
Exp3 表示任何一个表达式.
表示如果Exp1的结果为真,则计算Exp2,否则计算Exp3
请看示例:Ternary.java
字符串连接运算符: +
“ + ”可以用于两个字符串进行连接操作,例如,”hello” + “World”,另外,当”+”一边的表达式类型为字符串时,系统会自动把”+”另一边的表达式转换为字符串类型,然后再进行连接操作.
运算符的优先级
先算括号里面的, 不需要强记优先级, 不清楚就用括号括起来.请看示例Operator.java
常用的数学类------------java.lang.Math
请看示例MathFunc.java