3.3 数据类型
这里所说的数据类型是指 Java的8中基本数据类型,是原生就存在的。
不同进制数的字面值表示方法
进制 | 字面值表示方法 | 例子 | 是否默认 | JDK版本支持 |
2进制 | 0b或0B前缀(每4位可用_分隔) | 0b1001,0b1111_0100_0010 | Java SE 7开始 | |
8进制 | 0前缀 | 010 | ||
10进制 | 010 | √ | ||
16进制 | 0x或0X前缀 | 0xCAFE |
Java中没有unsigned 类型的数
在Java中谈默认值是没有意义的,一个数据的默认值只有在声明为成员变量或是静态变量以及初始化的时候存在,而没有初始化的变量会出现编译错误。
3.3.1 整数型(4种)
类型 | 字节数 | 表示范围 | 默认值 | 大致表示范围 | 字面值表示方法 | 例子 | 是否是默认字面值类型 | 是否推荐使用 |
byte | 1 | –128 到 127 | 0 | 100 | ||||
short | 2 | –32,768 到 32,767 | 0 | 3万 | ||||
int | 4 | –2,147,483,648 到 2,147,483, 647 | 0 | 20亿 | 400 | √ | √ | |
long | 8 | –9,223,372,036,854,775,808 到9,223,372,036,854,775,807 | 0L | 9*1018 | l或L后缀(400L) | 400L |
3.3.2 浮点数型(2种)
类型 | 字节数 | 表示范围 | 默认值 | 有效数字(精度)(10进制下) | 字面值表示方法 | 例子 | 是否为默认字面值类型 | 是否推荐使用 |
float | 4 | ±3.40282347E+38F | 0.0f | 6-7位 | f或F后缀 | 3.14F | ||
double | 8 | ±1.79769313486231570E+308 | 0.0d | 15位 | d或D后缀 | 3.14D,3.14 | √ | √ |
16进制指数式浮点数字面值表示方法
底数 | 表示方法 | 例子 | 常规表示方法 |
以2为底 | 0x***p***标记(尾数采用16进制,指数采用10进制) | 0x1.0p-3 | 1.0x2-3 |
3个特殊的浮点数
Double.POSITIVE_INFINITY | 正无穷 |
Double.NEGATIVE_INFINITY | 负无穷 |
Double.NaN | 非数(0/0或负数的平方根) |
1.Double类是对double类型的对象化封装,java.lang.Double
System.out.println(2.0 - 1.1)
输出结果是 0.8999999999999999 而不是 0.9 ,浮点数在实际存储时以2进制存储,出现了精度损失,入股数值计算不能有任何舍入误差,使用 BigDecimal 类
3.3.3 字符型(1种)
Java中的char字符表示的是unicode(即UTF-16)编码字符,
类型 | 字节数 | 表示范围 | 默认值 | 表示方法 | 例子 |
char | 2 | \u0000 到 \uFFFF | ‘\u0000’ | ‘ ’标记,可使用\u转译和特殊字符转译 | ‘A’,‘\u2122’,‘\n’ |
常用的char字符以及转译字符
转译形式 | 名称 | Unicode值 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\t | Tab | \u0009 |
\" | “ | \u0022 |
\' | ‘ | \u0027 |
\\ | \ | \u005c |
π,数字PI的符号 | \u03C0 | |
™,商标符号 | \u2122 |
Unicode型转译字符可以在源代码中直接使用
public static void main(String\u005B\u005D args)
等价于
public static void main(String[] args)
3.3.4 Unicode与char
3.3.5 布尔型
类型 | 默认值 | 字节数 | 表示方法 | 例子 |
boolean | false | 在编译之后都使用JVM中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节 | true,false | true,false |
boolean与其他类型不可转换,在c/c++中,0表示false,非0表示true,java中不行。