标签搜索

Java中的运算符

ATAO
2022-02-25 / 0 评论 / 44 阅读 / 正在检测是否收录...

运算符

1. 算数运算符

在 Java 中,使用算数运算符 +、-、*、/、% 表示加、减、乘、除、求余(取模)运算。当参与运算的两个操作数都是整数时,结果为正数,操作数中有浮点数时,结果为浮点数。

需要注意,整数被 0 除将会产生一个异常,而浮点数被 0 除将会得到无穷大或 NaN 结果。

2. 数学函数与常量

在 Math 类中,包含了各种各样的数学函数。例如,要想计算一个数值的平方根,可以使用 sqrt 方法:

double x = 4;
double y = Math.sqrt(x);
System.out.println(y); // prints 2.0

注意,println 方法和 sqrt 方法存在微小差异。println 方法处理 System.out 对象。但是,Math 类中的 sqrt 方法不处理任何对象,这样的方法称为静态方法。有关静态方法的详细内容将在第 4 章学习。

在 Java 中没有幂运算,因此需要借助 Math 类的 pow 方法:

double y = Math.pow(x, a);

将 y 的值设置为 x 的 a 次幂(x^a^)。pow 方法有两个 double 类型参数,其返回结果也为 double 类型。

Math 类提供了一些常用的三角函数:

  • Math.sin
  • Math.cos
  • Math.tan
  • Math.atan
  • Math.atan2

还有指数函数以及它的反函数--自然对数以及以 10 为底的对数:

  • Math.exp
  • Math.log
  • Math.log10

最后,Java 还提供了两个用于表示 π 和 额 е 常量的最接近的近似值:

  • Math.PI
  • Math.E

提示:不必在数学方法名和常量名前添加前缀 "Math" ,只要在源文件的顶部加上下面这行代码就可以了。

import static java.lang.Math.*;

例如:

System.out.println("The square root of \u03C0 is" + sqrt(PI));

提示:Math 类提高了一些方法时整数有更好的运算安全性。如果一个计算溢出,数学运算符只是悄悄地返回错误结果而不做任何提醒。例如:10 亿乘以 3(1000000000 * 3)的计算结果为 -1294967296,因为最大的 int 值也只是刚刚超过 20 亿。不过,如果调用 Math.multiplyExact(1000000000, 3),就会产生一个异常。另外还有一些方法(addExact、subtractExact、incrementExact、decrementExact 和 negateExact)也可以正确地处理 int 和 long 参数。

3. 数值类型之间的转换

我们经常需要将一种数值类型转换为另一种类型,下图给出了数值类型之间的合法转换。

image-20220213132005646

其中,实线箭头表示无信息丢失的转换,虚线箭头表示可能有精度损失的转换。

当用一个二元运算符连接两个值时,先要将两个操作数转换为同一类型,然后再进行计算。

  • 如果两个操作数中有一个是 double 类型,另一个操作数就会转换为 double 类型。
  • 否则,如果其中一个操作数为 float 类型,另一个操作数将会转换为 float 类型。
  • 否则,如果其中一个操作数为 long 类型,另一个操作数将会转换为 long 类型。
  • 否则,两个操作数都将被转换为 int 类型。

4. 强制类型转换

强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。例如:

double x = 9.97;
int nx = (int)x;

这样,变量 nx 的值为 9,因为强制类型转换通过截断小数部分将浮点值转换为整型。

提示:如果想得到四舍五入最接近的整数,需要使用 Math.round 方法:

double x = 9.97;
int nx = (int)Math.round(x);

现在,变量 nx 的值为 10。Math.round 方法返回的结果为 long 类型,可以通过显式的强制类型转换将 long 类型转换为 int 类型。

5. 结合赋值和运算符

例如:

x += 4;

等价于:

x = x + 4;

注意:如果运算符得到一个值,其类型与左侧操作数类型不同,就会发生强制类型转换。例如:

int x = 0;
x += 3.5;

其结果为3。

6. 自增与自减运算符

Java 提供了自增、自减运算符:n++ 将变量 n 的当前值加 1,n-- 则将 n 的值减 1。例如:

int n = 12;
n++;

将 n 的值改为 13。由于这些运算符改变的是变量的值,所以它们不能应用于数值本身。例如,4++ 就不是一个合法语句。

实际上,这些运算符有两种形式,上面介绍的是运算符放在操作数后面的 “后缀” 形式。还有一种 “前缀” 形式:++n 。后缀和前缀形式都会是变量值加 1 或减 1。但用在表达式中时,二者就有区别了。前缀形式会先完成加 1;而后缀形式会使用变量原来的值。

建议不要在表达式中使用 ++ 。

0

评论 (0)

取消