在Java中,使用算术运算符+、-、*、/
表示加、减、乘、除运算。
当参与/
运算时,两个操作数都是整数时,表示整除法;否则表示浮点除法。
整数的求余操作(取模)用%
表示。例如:15/2=7,15%2=1,15.0/2=7.5。
值得注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN的结果。
算数运算符 | 说明 |
---|---|
+ | 加 |
- | 减 |
* | 乘× |
/ | 除÷ |
% | 取余数 |
在Math类中,包含了各种各样的数学函数,在编写不同类别的程序时,可能需要的函数也不同。
想计算一个数值的平方根,可以使用sqrt方法:
double x = 4; double y = Math.sqrt(x); System.out.println(y);
输出为:2.0
在Java中,没有幂运算,因此需要借助于Math类的pow方法:
double y = Math.pow(x, a);
将y的值设为x的a次幂( x a x^a xa)。
pow方法有两个double类型的参数,其返回结果也为double类型。
Math类还提供了常用的三角函数:
Math.sin;
Math.cos;
Math.tan;
Math.atan;
Math.atan2;
指数函数以及它的反函数,自然对数以及10为底的对数:
- Math.exp;
- Math.log;
- Math.log10;
两个用于表示 π 和 e \pi和e π和e常量的近似值:
- Math.PI
- Math.E
如果不想再数学方法名和常量名前添加前缀"Math",只需要在源文件的顶部添加代码:
import static java.lang.Math.*;
可以在赋值中使用二元运算符,这是一种便捷的简写形式:
x += 4;
//等价于
x = x + 4;
(一般地,将运算符放在=号的左边,如*=或%=)
自增、自减运算符:n++将变量n的当前值加1,n–将n的值减1。
int n = 12;
n++; //自增后,n=13
这些运算符只会改变变量的值,它们的操作数不能是数值。例如:4++是个非法语句。
自增与自减运算符还有一种“前缀”形式:++n,–n;后缀和前缀形式都会使变量值加1或减1。在表达式中,前缀形式会先完成加1,而后缀形式会先使用变量原来的值。
int m = 7;
int n = 7;
int a = 2 * ++m; // a=16,m=8
int b = 2 * n--; // b=14,n=8
3 == 7 //返回false
3 != 7 //返回true
经常使用的运算符还有:<小于,>大于,<=小于等于,>=大于等于;
感叹号!就是逻辑非运算符,运算符&&表示逻辑**“与“运算符,运算符||表示逻辑”或“**运算符;
expression1 && expression2
expression1和expression2计算返回的结果都为true时,整个表达式才会返回true;
若expression1和expression2计算返回的结果其中一个为false时,整个表达式返回的结果为false。
expression1 || expression2
若expression1返回true则不计算expression2,将整个表达式的结果返回true;
若expression1返回false,计算expression2返回true,整个表达式结果也将会返回true;
若expression1和expression2的返回结果都是false,那整个表达式结果也将返回false。
x < y ? x : y
将会返回x和y中较小的一个。
处理整数类型时,可以直接对组成整型数值的各个位完成操作。位运算符包括:&(“and”)、|(“or”)、^(“xor”)、~(“not”)。另外还有>>和<<运算符将位模型左移或右移。
运算符优先级:
结合性 | 运算符 |
---|---|
从左往右 | ()括号 |
从右往左 | ! ~ ++ – + 一元运算 - 一元运算 ()强制类型转换 new |
从左往右 | * / % |
从左往右 | + - |
从左往右 | << >> >>> |
从左往右 | < <= > >= |
从左往右 | == != |
从左往右 | & |
从左往右 | ^ |
从左往右 | | |
从左往右 | && |
从左往右 | || |
从右往左 | ?: |
从右往左 | = += -= *= /= %= &= |= ^= <<= >>= >>>= |
若不适用括号,就按照给出的运算符优先级次序进行计算。同一个级别的运算符按照从左到右的次序进行计算(除了表中给出的右结合运算符外)。
[1] 《Java核心技术 卷I 基础知识》 ------【美】凯S. 霍斯特曼