第一次写博客,有点陌生,哈哈。(本次博客取材于java核心技术卷(一))
(1)关于浮点数的问题。
java中所有浮点数值计算都遵循IEEE754标准。有三种表示溢出和出错情况,分别为:
1 Double.POSITIVE_INFINITY 表示整无穷大。
2 Double.NEGATIVE_INFINITY表示负无穷大
3 Double.NaN
判断一个数是否等于NaN不能用==,只能用Double.isNaN(),而其他两个可以。
整数被0除会产生一个异常,而浮点数被0除会得到NaN或无穷大。
浮点数在计算时会有舍入误差,如果不允许任何舍入误差,用BigDecimal。
(二)关于转义字符的问题
Unicode转义序列会在解析代码前得到处理。所以注意每次\u的出现。
1.\u0022表示";所有"\u0022+\u0022"会被解析成""+"";
2.注释里\u后面一定要跟4个16进制数,否者会产生一个语法错误。
(三)关于switch case
case标签可以是
1 char byte short int 以及他们对应的封装类的引用类型。
2 枚举常量
3 从javase7开始,可以是String引用。
注意:第一点其实隐含了java的自动装箱/拆箱
这里用到一个.class文件转.java文件的工具:Java Decompiler
反编译后:
枚举类型其实在编译时也转成整型来处理
反编译后:
(四)一些其他事项:
1 从javase7开始,可以用0b或者0B当前缀表示二进制数。
2 数字可以写成1_000_000形式,编译器会自动去掉这些下划线。
3 byte short char在运算时会自动转换成int
4 浮点型强制转换成整型会去掉小数部分,Math.round()会得到最接近给定浮点的整数,返回类型是long。
5 int x = 1;x+=3.5是合法的,相当于x=(int)(x+3.5);
6 >>会用符号位填充高位,>>>会用0填充高位,没有<<<
7 块(即复合语句)是指用一对大括号括起来的若干条简单的java语句,块确定了变量的作用域。
8 java的break可以带标签,比如
label:
break label;
只能用来跳出语句块,不能用来跳入语句块。
9 java数组允许长度为0