第三章 Java的基本程序设计结构 (2)

3.5 运算符

3.5.4 数学函数与常量

在Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。
要想计算一个数值的平方根,也可以使用sqrt方法:

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

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

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

将y的值设置为x的a次幂。pow方法有两个double类型的参数,其返回结果也为double类型。
Math提供了一些常用的三角函数:

  • Math.sin
  • Math.cos
  • Math.tan
  • Math.atan
  • Math.atan2
    还有指数函数以及它的反函数-自然对数以及以10为底的对数:
  • Math.exp
  • Math.log
  • Math.log10
    最后,Java还是提供了两个用于表示π和e常量的近似值:
  • Math.PI
  • Math.E

    3.5.5 数值类型之间的转换

    在程序运行时,经常需要将一种数值类型转换为另一种数值类型。

Created with Raphaël 2.1.0 byte byte short short char char int int int int float float long long double double test test test test test test test test

上图中的实心箭头表示信息无丢失的转换;有三个虚箭头,表示可能有精度损失的转换。

    int n = 123456789;
    float f = n; // f is 1.234567892E8

当两个数值(一个为整型,一个为浮点型)进行二元操作时,先要将两个操作数转换为同一种类型,然后在进行计算。
- 如果两个操作数有一个是double类型,另一个操作数就会转换为double类型。
- 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
- 否则,如果其中一个操作数为long类型,另一个操作数将会转换为long类型。
- 否则,两个操作数都将转换为int类型。

3.5.6 强制类型转换

在必要的时候int类型的值将会自动地转换为double类型,但另一方面,有时也需要将double转换为int。在Java中,允许进行这种数值之间的类型转换。当然有可能会丢失一些信息。在这种情况下,需要通过强制类型转换(cast)实现这个操作,强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟带转换的变量名。例如:

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

这样变量nx的值为9。强制类型转换同伙截断小数部分将浮点数转换为整型。
如果想对浮点数进行舍入运算,以便到最近的整数(在很多情况下,希望使用这种操作方式),那就需要使用Math.round方法:

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

现在nx的值为10。当调用round的时候,任然需要使用强制类型转换(int),原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显示的方式强制类型转换才能将long类型转换为int类型。

3.5.7 括号与水元素安抚优先级

如果不适用圆括号,就安装给出的运算符优先级次序进行计算。同一级别的运算符按照从左到右的次序进行计算(除了表中给出的右结合运算符外。)例如,由于&&的优先级比||的优先级高,所以表达式

    a && b || c

等价于

    (a && b) || c

又因为 += 是右结合运算符,所以表示

    a += b += c

等价于

    a += (b += c)

也就是将 b+=c 的结果(加上c之后的b)加上a、

运算符 结合性
[].()(方法调用) 从左到右
!~ ++ – + (一元运算) - (一元运算) ()(强制类型转换) new 从右到左
* / % 从左到右
+ - 从左到右
<< >> >>> 从左到右
< <= > >= instanceof 从左到右
== != 从左到右
& 从左到右
^ 从左到右
| 从左到右
&& 从左到右
|| 从左到右
?: 从右到左
= += -= *= /= %= &= |= ^= <<= >>= >>>= 从右到左

3.5.8 枚举类型

有时候,变量的取值只在一个有限的结合内。例如:销售的服装或比萨饼只有小、中、大和超大这四种尺寸。当然,可以将这些尺寸分别编码为1,2,3,4或S、M、L、X。但这样存在着一定的隐患。在变量中很可能保存的是一个错误的值(如0或m)。
针对这种情况,可以自定义枚举类型。枚举类型包括有限个命名的值。例如,

    enum Size(SMALL,MEDIUM,LARGE,EXTRA_LARGE);

现在申明这种类型的变量只能存储这个类型声明中给定的这几个枚举值,或者null值,null表示这个变量没有设置任何值。

猜你喜欢

转载自blog.csdn.net/u012693119/article/details/78144788