Java的8种基本数据类型(primitive type)

时间:2022-01-06 16:26:39

         在Java中,一共有8种基本数据类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值boolean类型。

         1.整型

         类型 存储需求   取值范围

         int              4字节                 -2^32~2^32-1(-2147483648~2147483647)

         short 2字节                 -2^15~2^15-1(-32768~32767)

         long 8字节                 -2^63~2^63-1(-9223372036854774808~9223372036854774807)

         byte           1字节                 -2^7~2^7-1(-128~127)

         长整型数值有一个后缀L(如1000000000L)。十六进制数值有一个前缀0x(如0xCAFE)。八进制有一个前缀0,例如,011对应八进制中的9。很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数。

         从Java7开始,加上前缀0b就可以写二进制数。例如0b1111就是15。另外,同样是从Java7开始,还可以为数字字面量加下划线,如1_000_000,不过这些下划线也只是为了让程序变得更易读懂,java编译器会去除这些下划线的。

         另外,从C++转行学java的同学注意了,Java没有任何无符号类型(sunsigned)!

         2.浮点类型

         类型 存储需求   取值范围

         double      8字节                 -1.79E+308 ~+1.79E+308(有效位数为15位)

         float           4字节                 -3.40E+38 ~ +3.40E+38(有效位数为6~7位)

         float类型的数值有一个后缀F(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D(例如,3.14D)。

         所有的浮点数值计算都遵循IEEE 754规范。下面是用与表示溢出和出错情况的三个特殊的浮点数值:

         1、正无穷大——————Double.POSITIVE_INFINITY

         2、符无穷大——————Double.NEGATIVE_INFINITY

         3、NaN————————Double.NaN

         (以上与相应的Float类型的常量一样)

         值得注意的是:检测一个特定值是否等于Double.NaN是if(Double.isNaN(x)),而不是if(x ==Double.NaN)

       警告:浮点数值不适用与禁止出现舍入误差的计算中(金融业)。例如,命令System.out.println(2.0-1.1)将打印出0.89999999999999999,而不是应该出现的0.9。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10。这就好像十进制无法精确的表示1/3一样。另外经过一些实验,在保留小数点后足够多位后,在其他的语言中也会出现这个问题。如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类(java)。

         3.char类型

         用于表示单个字符。通常用来表示字符常量。例如:‘A’是编码为65所对应的字符常量。它与"A"不同,"A"是一个包含字符A的字符串。在Java中,char类型用UTF-16编码描述一个代码单元。但是强烈建议不要在程序中使用char类型,除非却是需要对UTF-16代码单元进行操作。并且最好将需要处理的字符串用抽象数据类型表示。

4.boolean类型

boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。整型值和布尔值之间不能进行相互转换。

注意:在C++中,数值或指针可以代替boolean值。值0相当于布尔值false,非0值相当于布尔值true。在Java中则不是这样。