ITEEDU

Java Gossip: 资料型态

程序在执行的过程中,需要运算许多的信息,也需要储存许多的信息,这些信息可能是由使用者输入、从档案中取得,甚至是由网络上得到,在程序运行的过程中, 这些信息透过「变量」(Variable)加以储存,以便程序随时取 用。

一个变量用来指向一个内存空间,数据就是储存在这个空间中,使用变量名称来取得数据相信会比使用内存位置来得方便;然而由于数据在储存时所需要的容量 不一,不同的数据必须要配给不同的空间大小来储存,在Java中对不同的数据区分有几种不同的「数据型态」(Data type)。

在Java中基本的数据型态主要区分为「整数」(Integer)、「位」(Byte)、「浮点数」(Float)、「字符」(Character)与 布尔数(Boolean)几种,而这几种还可以细分,如下所示:

 整数

只储存整数数值,可细分为「短整数」(short)(占2个字节)、整数(int)(占4个字节)与长整数(long)(占8个字节),长整数所占的内存比整数来得多,可表示 的数值范围也就较大,同样的整数可表示的整数数值范围也比短整数来得大。

Java提供有byte数据型态,专门储存位数据,例如影像位资 料,一个byte数据型态占一个字节,而必要的话,byte数据型态也可以用于储存整数数值。

浮点数

主要用来储存小数数值,也可以用来储存范围更大的整数,可分为浮点数(float) (占4个字节)与倍精度浮点数(double)(占8个字节), 倍精度浮点数所使用的内存空间比浮点数来得多,可表示的数值范围与精确度也比较大。

字符

用来储存字符,Java的字符采Unicode编码,其中前128个 字符编码与ASCII编码兼容;每个字符数据型态占两个字节,可储存的字符范围由\ u0000到\uFFFF,由于Java的字符采用Unicode编码,一个中文字与一个英文字母在Java中同样都是用一个字符来表示。

布尔数

占内存2个字节,可储存true与false两 个数值,分别表示逻辑的「真」与「假」。

因为每种数据型态所占有的内存大小不同,因而可以储存的数值范围也就不同,例如整数int的内存空间是4个字节,所以它可以储存的整数范围为- 2147483648至2147483647,如果储存值超出这个范围的话称之为「溢 值」(Overflow),会造成程序不可预期的结果,您可以使用下面这个程序获得数值的储存范围:

DataTypeMaxMin.java
public class DataTypeMaxMin {
	public static void main(String[] args) {
		System.out.printf("short range: %d ~ %d\n",
		Short.MAX_VALUE,
		Short.MIN_VALUE);
		System.out.printf("int range: %d ~ %d\n",
		Integer.MAX_VALUE,
		Integer.MIN_VALUE);
		System.out.printf("long range: %d ~ %d\n",
		Long.MAX_VALUE,
		Long.MIN_VALUE);
		System.out.printf("byte range: %d ~ %d\n",
		Byte.MAX_VALUE,
		Byte.MIN_VALUE);
		System.out.printf("float range: %e ~ %e\n",
		Float.MAX_VALUE,
		Float.MIN_VALUE);
		System.out.printf("double range: %e ~ %e\n",
		Double.MAX_VALUE,
		Double.MIN_VALUE);
	}
}

其中Byte、Integer、Long、Float、Double都 是java.lang套件下的类别名称,而 MAX_VALUE与MIN_VALUE则是各类别中所定义的静态常数成员,分别表示该数据型态可储 存的数值最大与最小范围,%e表示用科学记号显示,执行结果如下所示:

short range: 32767 ~ -32768
int range: 2147483647 ~ -2147483648
long range: 9223372036854775807 ~ -9223372036854775808
byte range: 127 ~ -128
float range: 3.402823e+38 ~ 1.401298e-45
double range: 1.797693e+308 ~ 4.900000e-324

其中浮点数所取得是正数的最大与最小范围,加上负号即为负数的最大与最小范围。