程序在执行的过程中,需要运算许多的信息,也需要储存许多的信息,这些信息可能是由使用者输入、从档案中取得,甚至是由网络上得到,在程序运行的过程中, 这些信息透过「变量」(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),会造成程序不可预期的结果,您可以使用下面这个程序获得数值的储存范围:
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
其中浮点数所取得是正数的最大与最小范围,加上负号即为负数的最大与最小范围。