Java语言是静态类型语言,意味着在编译时就知道每个变量和表达的类型。
Java语言同时也是强类型语言,意味着变量能保存的数据类型是有限制的。强类型有助于编译时的错误检查。
Java语言的数据类型分为两类:基本类型(primitive type)和引用类型(reference type)。
基本类型
基本类型是是Java预定义好的,通过保留关键字来定义。基本类型共有8种。可分为布尔类型、整数类型、浮点数类型。
整数类型
整数类型有byte、short、int、long、char 5种。其中char类型有其特殊性,还会有专门章节进行讲解。
整数字面量
整数字面量有二进制(binary)、八进制(octal)、十进制(decimal)、十六进制(hexadecimal)。
- 二进制,以0B或0b开头,每位只能取0或1,如0B11,0b11。
- 八进制,以数字0开头,各位可取0~7。
- 十进制:首位可是1~9,其他位是0~9。
- 十六进制:以0x或0X开头,各位为0~F。
在此基础上还可:
- 可选的+或-前缀,表示正数和负数。
- 可选的L后缀,表示long类型。(L也可写成小字字母l,但易和数字1混淆)。
- 可在任意两个进制位之间使用下划线(_)分隔,以便于阅读。
类型 | 占用内存(bit) | 最小值 | 最大值 | 包装类 |
---|---|---|---|---|
byte | 8 | −27 (-128) | 27−1 (127) | Byte |
short | 16 | −215 (-32768 ) | 215−1 (37767) | Short |
int | 32 | −231 (-2147483648) | 231−1 (2147483647) | Integer |
long | 64 | −263 (-9223372036854775808) | −263−1 (9223372036854775807) | Long |
char | 16 | 0 | 216−1 (65535) | Character |
- 所有包装类中有都有 MIN_VALUE、MAX_VALUE表示该类对应的基本类型的最小值和最大值。还有SIZE表示对应基本类型占用的内存位数。
- 所有基本类型能表示的数值范围是有限的,如果需要使用任意大小的数字。可使用java.lang.BigInteger。
浮点类型
浮点类型有float和double 2种。
浮点数字面量
浮点数字面量有整数部分、小数点、小数部分、指数部分和类型后缀5个部分。可用十进制或十六进制表示。也可有各部分
十进制浮点数至少有一个数字,可以是整数部分或小数部分。如果只有小数部分,需要以小数点开头。
在些基础上还可:
- 可选的指数部分,指数部分以e或E开始,后跟无符号整数。这实际上是10进制的科学计数法。
- 可选的类型后缀,f和F表示float,d和D表示double,如果不加默认是double。
- 可使用下划线对数字进行分隔,以方便阅读。
如:1、0.1、1.1、1 E2、1.1 E-2、1F、1.1E2F
十六进制浮点数很少使用,所以不作介绍。
类型 | 占用内存(bit) | 包装类 |
---|---|---|
float | 32 | Float |
double | 64 | Double |
- 这两个包装类中有MIN_VALUE、MAX_VALUE、MIN_EXPONENT、MAX_EXPONENT分别表示最小值、最大值、最小指数、最大指数。SIZE表示占用的内存位数。
- 浮点数不可用于禁止再现舍入误差的计算中(比如金融计算)。如果需要在计算中不含有任何舍入误差,可以使用java.lang.BigDecimal类。
布尔类型
布尔类型只有两个值true和false。
要注意Java中的布尔类型不是数字。
字符类型
字符类型的字面量有字符或转义序列两种形式。使用英文单引号包围。
字符字面量只能表示UTF-16中的代码单元(code unit),这些代码单元的范围从\u0000到\uffff。
转义序列
可用的转义序列有:
\b 退格
\t 水平制表符
\n 换行符
\f 分页符
\r 回车
\” 双引号
\’ 单引号
\ 反斜杠
其他八进制转义序列,可表示\u0000到\u00ff。具体形式有:\[0-7]、\[0-7][0-7]、\[0-3][0-7][0-7]