数据类型
8种基本类型:4种整型、2种浮点类型、1种字符类型(char)、1种布尔类型
- ps:Java还提供了一个表示任意精度的算书包(big number),它是一个对象
整型
int、short、long、byte
- int(4字节)
- short(2字节)
- long(8字节)
- 表示方法:数值后缀加上"L"或者"l"
- byte(1字节)
- 十六进制(0x、0X开头)、八进制(0开头)、二进制(0b、0B开头)
- ps:Java7开始就可以用0b写二进制,并且可以用"_"分割数字变得更加易读
浮点类型
float、double
- float(4字节)
- 表示方法:数值后缀加上"F"或者"f"
- double(8字节)
- 表示方法:没有后缀F默认为double,当然也可以数值后缀加上"D"或者"d"
- 表示溢出和出错的三个特殊浮点数值:
- 正无穷(正整数/0)
- 负无穷
- NaN(不是一个数字)(0/0或负数平方根)
- ps:常量Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY、Double.NaN对应三种类型,但是检测与NaN是否相等时不能用
==
,用Double.isNaN(数) - ps:浮点数值计算是由误差的,若需要完全没有误差的计算,应该使用**"BisDecimal"类**
char类型
表示方法:单引号括起来,也可以用十六进制方法表示\u+Unicode值
- ps:Unicode转义序列会在解析代码前得到处理,即使它在任何地方(包括注释内)所以一定要多注意(详见Java核心一P34)
- ps:建议不要再程序中使用char类型,除非确实需要处理UTF-16代码单元
boolean类型
false、true
- ps:整型和布尔值不能转换
类型转换
自动类型转换
实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失
强制类型转换(造型)
运算符()
中的类型表示将值想要转换成的目标数据类型。
- ps:可能造成精度降低或者溢出
- 例如超出了目标类型的表示范围,就会截断成一个完全不同的值:(byte)300输出44
- 前两种结果都不对,第三种才正常