您的位置:首页 > 编程语言 > Java开发

The Java Programming Language4th读书笔记-第九章 运算符和表达式

2015-12-28 18:22 330 查看
浮点除法和取余运算可能会产生无穷大或NaN的结果,但是绝不会抛出异常:

xyx/yx%y
无穷±0.0±∞NaN
无穷±∞±0.0x
±0.0±0.0NaNNaN
±∞无穷±∞NaN
±∞±∞NaNNaN
2. strictfp用来声明严格浮点模式,但是严格性不可继承;如果我们想在所有的Java虚拟机实现之间保证逐位的精确结果,就必须在相关的方法、类和接口上使用strictfp修饰符;

3. 使用到浮点数的常量表达式始终是在严格模式下执行的;

4. 递增运算符++和递减运算符–也可以用于char型变量来得到他的后一个或前一个Unicode字符;

5. 几乎所有的关系运算符和判等运算符在测试数和NaN之间的关系时都会返回false,只有!=例外,它始终返回true。如果两个NaN进行运算,结果也是如此,例如:Double.NaN == Double.Nan的返回值总是false。如果要测试一个值是否为NaN,需要使用类型相关的NaN测试方法:静态方法Float.isNaN(float)和Double.isNaN(double);还有另一种方法可以用来测试NaN:如果x是NaN,那么x != x的结果是true;

6. &&(”条件与“)和||(”条件或“)运算符与简单的&(”逻辑与“)和|(”逻辑或“)运算符的逻辑功能是相同的,但是当左边的操作数已经可以决定整个表达式的真值时,&&和||运算符就可以避免再对右边的操作数做计算。基于这个原因,它们有时也被称为”短路运算符“(short-circuit operator)。

7. 运算符&是逻辑运算符还是位运算符完全取决于它的操作数的类型;

8. 移位操作运算符:

- <<:向左移位,右边补0;

- >>:向右移位,左边补最高位(符号位);

- >>>:向右移位,左边补0;

9. 移位操作中的实际移位位数是用类型长度减去1的值来对代码中提供的位数做掩码屏蔽所得的结果,例如对于32位的int型数,所用的掩码为0x1f(31),所以表达式(n<<35)和(n<<-29)都等价于(n<<3);

10. 除了运算符&&、||和?:以外,其他的运算符在执行运算之前,都会先求出它的每一个操作数的值;

11. 对于char类型转int类型,将通过把高16位置为0的方式转换,例如,Unicode字符\uffff会被当做整数0x0000ffff来处理。这种处理方式与处理short类型的值0xffff的方式完全不同:short类型的0xffff通过符号扩展得到的结果等于-1,而与它相等的int类型的值时0xffffffff;

12. 在类的内部,对静态成员的引用总是指向该类中声明的成员,或是该类中继承而来的成员;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 读书笔记