Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本类型(Primitive Type)。其中有4种整型、2种浮点型、1种用户表示Unicode编码的字符单元的字符类型char和一种用于表示真值的boolean类型。
1. 整型
用于表示没有小数部分的数值,允许为负。
类型 | 字数 | 范围 |
类型 | 字节数 | 范围 |
int | 4字节 | -2147483648 ~ 2147483647 |
short | 2字节 | -32768 ~ 32767 |
long | 8字节 | -9223372036854775808 ~ 9223372036854775807 |
byte | 1字节 | -128 ~ 127 |
在 Java 中, 整型的范围与运行 Java 代码的机器无关。从 Java 7 开始, 加上前缀 0b 或 0B 就可以写二进制数。 例如, 0B1001就是 9。另外, 同样是 从Java7开始,还可以为数字字面量加下划线,如用1_000_000表示100万。
2. 浮点类型
浮点类型用于表示有小数部分的数值。
类型 | 字节数 | 范围 |
float | 4字节 | 大约 ± 3.40282347E+38 |
double | 8字节 | 大约 ± 1.79769313486231570E+308 |
float:1bit(符号位)+8bits(指数位)+23bits(尾数位)
double:1bit(符号位)+ 11bits(指数位)+ 52bits(尾数位)
double 表示这种类型的数值精度是 float 类型的两倍 (有人称之为双精度数值 )。float类型的数值有一个后缀F或f (例如,3.14F)。 没有后缀F的浮点数值(如3.14) 默认为 double 类型。当然,也可以在浮点数值后面添加后缀 D 或 d ( 例如, 3.14D)。
三个特殊的浮点数值: 正无穷大、负无穷大、NaN(不是一个数字)。
常量Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY和Double.NaN分别表示。
例如, 一个正整数除以 0 的结果为正无穷大。计算 0/0 或者负数的平方根结果为 NaN。
3. char类型
char类型占用两个字节,char类型原本用于表示单个字符。不过,现在情况已经有所变化。 如今, 有些 Unicode 字符可以用一个char 值描述, 另外一些 Unicode 字符则需要两个 char 值。
char类型的值可以表示为十六进制值,其范围从 \u0000 到 \uffff ,其中\u为转移序列。
4. Unicode 和 char 类型
在 Unicode 出现之前,已经有许多种不同的标准: 美国的 ASCII、 西欧语言中的 ISO 8859-1,俄罗斯的 KOI-8、 中国的GB18030和BIG-5等。这样就产生了下面两个问题: 一个是对于任意给定的代码值, 在不同的编码方案下有可能对应不同的字母; 二是采用大字符集的语言其编码长度有可能不同。例如, 有些常用的字符采用单字节编码,而另一些字符则需要两个或更多个字节。
设计 Unicode 编码的目的就是要解决这些问题。在 20 世纪 80 年代开始启动设计工作时, 人们认为两个字节的代码宽度足以对世界上各种语言的所有字符进行编码, 并有足够的空间 留给未来的扩展。在设计 Java 时决定采用 16 位的 Unicode 字符集, 这样会比使用 8 位字符集的程序设 计语言有很大的改进。
十分遗憾, 经过一段时间, 不可避免的事情发生了。Unicode字符超过了 65536 个, 其主要原因是增加了大量的汉语、 日语和韩语中的表意文字。 现在, 16 位的 char 类型已经不能满足描述所有 Unicode 字符的需要了。
下面利用一些专用术语解释一下 Java 语言解决这个问题的基本方法。码点 ( code point ) 是指与一个编码表中的某个字符对应的代码值。在 Unicode 标准中, 码点采用十六进制书写,并加上前缀U+, 例如U+0041就是拉丁字母A的码点。Unicode的 码点可以分成 17 个代码级别(code plane)。第一个代码级别称为基本的多语言级别(basic multilingual plane ), 码点从 U+0000 到 U+FFFF , 其中包括经典的 Unicode 代码;其余的 16 个级别码点从U+10000到U+10FFFF, 其中包括一些辅助字符(supplementary character)。
UTF-16 编码采用不同长度的编码表示所有 Unicode 码点。在基本的多语言级别中(U+0000 到 U+FFFF), 每个字符用16位表示,通常被称为代码单元(code unit); 而辅助字符采用一对连续的代码单元进行编码。
在 Java 中,char 类型描述了UTF-16编码中的一个代码单元。
5. boolean类型
boolean ( 布尔)类型有两个值: false 和 true , 用来判定逻辑条件,整型值和布尔值之间不能进行相互转换。