特殊情况:主要类型
有一系列类需特别对待;可将它们想象成“基本”、“主要”或者“主”(Primitive)类型,进行程序设计 时要频繁用到它们。之所以要特别对待,是由于用 new创建对象(特别是小的、简单的变量)并不是非常有 效,因为new将对象置于“堆”里。对于这些类型,Java 采纳了与 C和 C++相同的方法。也就是说,不是用 new创建变量,而是创建一个并非句柄的“自动”变量。这个变量容纳了具体的值,并置于堆栈中,能够更 高效地存取。 Java 决定了每种主要类型的大小。就象在大多数语言里那样,这些大小并不随着机器结构的变化而变化。这 种大小的不可更改正是 Java 程序具有很强移植能力的原因之一。
主类型 大小 最小值 最大值 封装器类型
boolean 1 位 - - Boolean char 16位 Unicode 0 Unicode 2的 16次方-1 Character byte 8位 -128 +127 Byte(注释①) short 16 位 -2 的15 次方 +2的 15次方-1 Short(注释①) int 32位 -2的 31次方 +2 的31 次方-1 Integer long 64位 -2 的63 次方 +2的 63次方-1 Long float 32 位 IEEE754 IEEE754 Float double 64 位 IEEE754 IEEE754 Double Void - - - Void(注释①)
①:到 Java 1.1 才有,1.0 版没有。
数值类型全都是有符号(正负号)的,所以不必费劲寻找没有符号的类型。 主数据类型也拥有自己的“封装器”(wrapper)类。这意味着假如想让堆内一个非主要对象表示那个主类 型,就要使用对应的封装器。例如: char c = 'x'; Character C = new Character('c'); 也可以直接使用: Character C = new Character('x'); 这样做的原因将在以后的章节里解释。
1. 高精度数字 Java 1.1 增加了两个类,用于进行高精度的计算:BigInteger和 BigDecimal。尽管它们大致可以划分为 “封装器”类型,但两者都没有对应的“主类型”。
48
这两个类都有自己特殊的“方法”,对应于我们针对主类型执行的操作。也就是说,能对int或 float做的 事情,对BigInteger 和BigDecimal 一样可以做。只是必须使用方法调用,不能使用运算符。此外,由于牵 涉更多,所以运算速度会慢一些。我们牺牲了速度,但换来了精度。 BigInteger支持任意精度的整数。也就是说,我们可精确表示任意大小的整数值,同时在运算过程中不会丢 失任何信息。 BigDecimal支持任意精度的定点数字。例如,可用它进行精确的币值计算。 至于调用这两个类时可选用的构建器和方法,请自行参考联机帮助文档。
1 package Com.TomTest; 2 3 4 import java.util.Date; 5 import java.awt.*; 6 public class TomTest_48{ 7 public static void main(String args[]){ 8 Date date=new Date(); 9 Button button=new Button("确定"); 10 System.out.println(date.toString()); 11 System.out.println(button.toString()); 12 } 13 }