整型
byte、short、char类型可以进行数学运算,在运算时先会转换成int类型,再进行运算。
如,
byte num1 = 30;
byte num2 = 40;
byte result = (byte)(num1+num2);
num1+num2运算时,num1和num2先被转换成int类型,然后参与运算,结果为int类型,所以要以byte类型保存结果的时候,需要进行强制类型转换。
浮点类型
表示溢出和出错情况的三个特殊的浮点数值:
- 正无穷大
- 负无穷大
- NaN(不是一个数字)
例如,一个正整数除以0的结果为正无穷大。计算0/0或者负数的平方根结果为NaN。
这三种情况分别对应三个常量(相应的Float类型的常量也一样):
- Double.POSITIVE_INFINITY
- Double.NEGATIVE_INFINITY
- Double.NaN
判断特定值是否等于Double.NaN:
if (Double.isNaN(x)) // check whether x is "not a number"
不能用x==Double.NaN来进行判断。
另外,浮点数计算是会有误差的,如(2.0-1.1)会打印出0.8999999999999999。如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类。
boolean类型
boolean(布尔)类型有两个值:false和true(注意不用大写)。在Java中整型值和布尔值之间不能进行相互转换。
例如,
if (x=0)
在C++中它的运行结果是false,但是在Java中,表达式x=0不能转换为布尔值,所以编译也是无法通过的。
补:Java没有任何无符号类型(unsigned)