《JAVA核心技术(卷1)》读书笔记02-运算符
运算符
数学函数与常量
在Math 类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。
可以用sqrt
方法计算一个数值的平方根
1 | public class Demo351 { |
数值类型之间的转换
我们经常需要将一种数值类型转换为另一种数值类型。
在图中有6 个实心箭头,表示无信息丢失的转换;有3 个虚箭头,表示可能有精度
损失的转换。例如,123 456 789 是一个大整数,它所包含的位数比float 类型所能够表达的位数多。当将这个整型数值转换为float 类型时,将会得到同样大小的结果,但却失去了一定的精度。
当使用上面两个数值进行二元操作时(例如n + f ,n 是整数,f 是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。
- 如果两个操作数中有一个是double 类型,另一个操作数就会转换为double 类型。
- 否则,如果其中一个操作数是float 类型,另一个操作数将会转换为float 类型。
- 否则,如果其中一个操作数是long 类型,另一个操作数将会转换为long 类型。
- 否则,两个操作数都将被转换为int 类型。
强制类型转换
在必要的时候,int 类型的值将会自动地转换为double 类型。但另一方面,有时也需要将double 转换成int 。在Java 中,允许进行这种数值之间的类型转换。当然,有可能会丢失一些信息。在这种情况下,需要通过强制类型转换(cast) 实现这个操作。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。例如:
1 | double x = 9.997; |
这样,变量nx 的值为9。强制类型转换通过截断小数部分将浮点值转换为整型。
自增与自减运算符
在Java 中,借鉴了C 和C++的做法,也提供了自增、自减运算符:n++ 将变量n 的当前值加1,n—则将n 的值减1。例如:
1 | int n = 12; |
关系和boolean运算符
Java 沿用了C++ 的做法,使用&& 表示逻辑“ 与”运算符,使用丨|表示逻辑“ 或” 运算符。从!=运算符可以想到,感叹号!就是逻辑非运算符。&& 和丨|运算符是按照“ 短路”方式来求值的:如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。如果用&& 运算符合并两个表达式,例如:
1 | expression1 && expression2 |
已经计算得到第一个表达式的真值为false, 那么结果就不可能为true 。因此,第二个表达式就不必计算了。
Java 支持三元操作符?:,这个操作符有时很有用。如果条件为true, 下面的表达式
condition ? expression1 : expression2
就为第一个表达式的值,否则计算为第二个表达式的值。例如,
1 | x< y? x : y |
枚举类型
有时候,变量的取值只在一个有限的集合内。例如:销售的服装或比萨饼只有小、中、大和超大这四种尺寸。当然,可以将这些尺寸分别编码为1、2、3、4 或S、M
、L、X。但这样存在着一定的隐患。在变量中很可能保存的是一个错误的值(如0 或m) 。针对这种情况,可以自定义枚举类型。枚举类型包括有限个命名的值。例如:
1 | enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE}; |