The Java Programming Language4th读书笔记-第九章 运算符和表达式
2015-12-28 18:22
330 查看
浮点除法和取余运算可能会产生无穷大或NaN的结果,但是绝不会抛出异常:
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. 在类的内部,对静态成员的引用总是指向该类中声明的成员,或是该类中继承而来的成员;
x | y | x/y | x%y |
---|---|---|---|
无穷 | ±0.0 | ±∞ | NaN |
无穷 | ±∞ | ±0.0 | x |
±0.0 | ±0.0 | NaN | NaN |
±∞ | 无穷 | ±∞ | NaN |
±∞ | ±∞ | NaN | NaN |
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树