Java 定义了4个整数类型:字节型(byte),短整型(short),整型(int),长整型(long )。这些都是有符号的值,正数或是负数。Java 不支持仅仅是正的无符号的整数。许多其他计算机语言,包括C/C++ ,支持有符号或无符号的整数。然而,Java 的设计者感到无符号整数是不必要的。具体地说,他们感到无符号(unsigned )概念主要被用来指定高位(high-order bit )状态,它定义了当int 表示一个数字时的符号。你将在第4章中看到,Java 对高位含义的管理是不同的,它通过增加一个专门的“无符号右移”运算符来管理高位。这样,就不需要无符号整数了。
整数类型的长度(width )不应该被理解为它占用的存储空间,而应该是该类变量和表达式的行为(behavior )。只要你对类型进行了说明,Java 的运行环境对该类的大小是没有限制的。事实上,为了提高性能,至少字节型和短整型的存储是32位(而非8位和16位),因为这是现在大多数计算机使用的字的大小。
这些整数类型的长度和变化范围如表3-1 所示:
表3-1 整数的各种类型及特性
名称 长度 数的范围
长整型 64 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
整型 32 -2,147,483,648 ~ 2,147,483,647
短整型 16 -32,768 ~ 32,767
字节型 8 -128~127
让我们分别讨论整数的每种类型。
3.3.1 字节型(byte)
最小的整数类型是字节型。它是有符号的8位类型,数的范围是-128~127。当你从网络或文件处理数据流的时候,字节类型的变量特别有用。当你处理可能与Java 的其他内置类型不直接兼容的未加工的二进制的数据时,它们也是有用的。
通过“byte ”这个关键字的使用来定义字节变量。例如,下面定义了2个变量,称为b 和c:byte b,c;
3.3.2 短整型(short)
short是有符号的16位类型,数的范围是 -32,768~32,767 。因为它被定义为高字节优先(称为big-endian 格式),它可能是Java 中使用得最少的类型。这种类型主要适用于16位计算机,然而这种计算机现在已经很少见了。
下面是声明Short变量的一些例子:
short s;
short t;
注意:“Endianness ”描述像short,int ,和 long 这些多字节数据类型是如何被存储在存储器中的。如果用2 个字节代表short ,那么哪个字节在前,是高字节位(最重要的字节)还是低字节位(最不重要的字节)?说一台机器是big-endian,那意味着这个机器中最重要的字节在前,最不重要的字节在后。例如 SPARC 和PowerPC 的机器是 big-endian ,而Intel x86 系列是 little-endian 。
3.3.3 整型(int)
最常用的整数类型是int 。它是有符号的32位类型,数的范围是-2,147,483,648~2,147,483,647 。int 类型的变量通常被用来控制循环及作数组的下标。任何时候你的整数表达式包含byte,short,int 及字面量数字,在进行计算以前,所有表达式的类型被提升(promoted )到整型。
整型是最通用并且有效的类型,当你想要计数用作或数组下标或进行整数计算时,你应该使用整型。似乎使用字节型和短整型可以节约空间,但是不能保证 Java 不会内部把那些类型提升到整型。记住,类型决定行为,而不是大小(惟一的例外是数组,字节型的数据保证每个数组元素只占用一个字节,短整型使用 2 个字节,整型将使用4个。)
3.3.4 长整型(long)
long 是有符号的64位类型,它对于那些整型不足以保存所要求的数值时是有用的。长整型数的范围是相当大的。这使得大的、整个数字都被需要时,它是非常有用的。例如,下面的程序是计算光在一个指定的天数旅行的英里数。
// Compute distance light travels using long variables.
class Light {
public static void main(String args[]) {
int lightspeed;
long days;
long seconds;
long distance;
// approximate speed of light in miles per second
通过“byte ”这个关键字的使用来定义字节变量。例如,下面定义了2个变量,称为b 和c:byte b,c;
3.3.2 短整型(short)
short是有符号的16位类型,数的范围是 -32,768~32,767 。因为它被定义为高字节优先(称为big-endian 格式),它可能是Java 中使用得最少的类型。这种类型主要适用于16位计算机,然而这种计算机现在已经很少见了。
下面是声明Short变量的一些例子:
short s;
short t;
注意:“Endianness ”描述像short,int ,和 long 这些多字节数据类型是如何被存储在存储器中的。如果用2 个字节代表short ,那么哪个字节在前,是高字节位(最重要的字节)还是低字节位(最不重要的字节)?说一台机器是big-endian,那意味着这个机器中最重要的字节在前,最不重要的字节在后。例如 SPARC 和PowerPC 的机器是 big-endian ,而Intel x86 系列是 little-endian 。
3.3.3 整型(int)
最常用的整数类型是int 。它是有符号的32位类型,数的范围是-2,147,483,648~2,147,483,647 。int 类型的变量通常被用来控制循环及作数组的下标。任何时候你的整数表达式包含byte,short,int 及字面量数字,在进行计算以前,所有表达式的类型被提升(promoted )到整型。
整型是最通用并且有效的类型,当你想要计数用作或数组下标或进行整数计算时,你应该使用整型。似乎使用字节型和短整型可以节约空间,但是不能保证 Java 不会内部把那些类型提升到整型。记住,类型决定行为,而不是大小(惟一的例外是数组,字节型的数据保证每个数组元素只占用一个字节,短整型使用 2 个字节,整型将使用4个。)
3.3.4 长整型(long)
long 是有符号的64位类型,它对于那些整型不足以保存所要求的数值时是有用的。长整型数的范围是相当大的。这使得大的、整个数字都被需要时,它是非常有用的。例如,下面的程序是计算光在一个指定的天数旅行的英里数。
// Compute distance light travels using long variables.
class Light {
public static void main(String args[]) {
int lightspeed;
long days;
long seconds;
long distance;
// approximate speed of light in miles per second
lightspeed = 186000;
days = 1000; // specify number of days here
seconds = days * 24 * 60 * 60; // convert to seconds
distance = lightspeed * seconds; // compute distance
System.out.print("In " + days);
System.out.print(" days light will travel about ");
System.out.println(distance + " miles.");
}
}
这个程序运行的结果如下:
In 1000 days light will travel about 16070400000000 miles.
很清楚,计算结果超出了整型数的表达范围。