在程序设计中经常用到一系列类型,它们需要特殊对待。
可以把它们当成基本类型,之所以特殊对待,是因为用new创建的对象会被存储在堆里,所以如果创建的特别是一个小的,
简单的变量,往往不是很高效。因此对于这些类型,java采取与c和c++相同的方法。
不用new来创建变量,而是创建一个并非是引用的“自动”变量。
这个变量直接存储“值”,并置于堆栈中,因此更加高效。
Java 要确定每种基本类型所占存储空间的大小。
它们的大小并不像其他大多数语言那样随机器硬件架构的变化而变化。
这种所占存储空间大小的不变性是Java程序比用其他大多数语言编写的程序更具可移植性的原因之一。
基本类型 大小 最小值 最大值 包装器类型
boolean --- ---- ----- Boolean
char 16-bit Unicode 0 Unicode 2^16-1 Character
byte 8 bits -128 +127 Byte
short 16 bits -2^15 +2^15-1 Short
int 32 bits -2^31 +2^31-1 Integer
long 64 bits -2^63 +2^63+1 Long
float 32 bits IEEE754 IEEE754 Float
double 64 bits IEEE754 IEEE754 Double
void ---- ----- --- Void
所有数值类型都有正负号,所以不要去寻找无符号的数值类型。
boolean类型所占存储空间的大小 没有明确指定,仅定义为能够去字面值true或false。
基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。
例如:
char c="x";
Character ch=new Character(c);
也可以这样用:
Character ch=new Character("x");
Java SE5的自动包装功能将自动地将基本类型转换为包装器类型:
Character ch="x";
并可以反向转化:
char c=ch;
包装基本类型的原因将在以后的章节说明。
高精度数字(High-precision numbers)
Java 提供了两个用于高精度计算的类:BigInteger 和BigDecimal。
虽然它们大体上属于"包装器类"的范畴,但二者都没有对应的基本类型。
不过这两个类包含的方法,提供的操作与对基本类型所能执行的操作相似。
也就是说,能作用于int 或float的操作,也同样能作用于BigInteger或BigDecimal。
只不过必须以方法调用方式取代运算符方式来实现。
由于这么做复杂了许多,所以运算速度会比较慢。以速度换取了精度。
BigInteger支持任意精度的整数,也就是说,在运算中,可以准确地表示任何大小的整数值,而不会丢失任何信息。
BigDecimal支持任何精度的定点数,例如,可以用它进行精确的货币计算。
关于调用这两个类的构造器和方法的详细信息,请查阅JDK文档。
可以把它们当成基本类型,之所以特殊对待,是因为用new创建的对象会被存储在堆里,所以如果创建的特别是一个小的,
简单的变量,往往不是很高效。因此对于这些类型,java采取与c和c++相同的方法。
不用new来创建变量,而是创建一个并非是引用的“自动”变量。
这个变量直接存储“值”,并置于堆栈中,因此更加高效。
Java 要确定每种基本类型所占存储空间的大小。
它们的大小并不像其他大多数语言那样随机器硬件架构的变化而变化。
这种所占存储空间大小的不变性是Java程序比用其他大多数语言编写的程序更具可移植性的原因之一。
基本类型 大小 最小值 最大值 包装器类型
boolean --- ---- ----- Boolean
char 16-bit Unicode 0 Unicode 2^16-1 Character
byte 8 bits -128 +127 Byte
short 16 bits -2^15 +2^15-1 Short
int 32 bits -2^31 +2^31-1 Integer
long 64 bits -2^63 +2^63+1 Long
float 32 bits IEEE754 IEEE754 Float
double 64 bits IEEE754 IEEE754 Double
void ---- ----- --- Void
所有数值类型都有正负号,所以不要去寻找无符号的数值类型。
boolean类型所占存储空间的大小 没有明确指定,仅定义为能够去字面值true或false。
基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。
例如:
char c="x";
Character ch=new Character(c);
也可以这样用:
Character ch=new Character("x");
Java SE5的自动包装功能将自动地将基本类型转换为包装器类型:
Character ch="x";
并可以反向转化:
char c=ch;
包装基本类型的原因将在以后的章节说明。
高精度数字(High-precision numbers)
Java 提供了两个用于高精度计算的类:BigInteger 和BigDecimal。
虽然它们大体上属于"包装器类"的范畴,但二者都没有对应的基本类型。
不过这两个类包含的方法,提供的操作与对基本类型所能执行的操作相似。
也就是说,能作用于int 或float的操作,也同样能作用于BigInteger或BigDecimal。
只不过必须以方法调用方式取代运算符方式来实现。
由于这么做复杂了许多,所以运算速度会比较慢。以速度换取了精度。
BigInteger支持任意精度的整数,也就是说,在运算中,可以准确地表示任何大小的整数值,而不会丢失任何信息。
BigDecimal支持任何精度的定点数,例如,可以用它进行精确的货币计算。
关于调用这两个类的构造器和方法的详细信息,请查阅JDK文档。