在 Java 中,每一个变量属于一种类型。在声明变量时,变量所属的类型位于变量名之前。
Java 的类型包括:基本类型和引用类型。基本类型和引用类型的区别在于,基本类型存储在栈上,而引用类型存储在堆上,并且基本类型没有方法。
基本类型
其中基本类型包括 byte, char, short, int, long, float, double, boolean。
基本类型的定义初始化如下:
1 | byte b = 0; |
所有基本类型在使用时必须先初始化后才能使用,否则会出现错误。
如果基本类型在类中方法之外定义但是没有初始化,那么类在创建时会对基本类型自动初始化。
1 | public class BasicTypeInit { |
输出如下:
1 | 0 |
不同类型的变量初始化的值不同,byte, short, int, long 都会初始化为 0, float 和 double 初始化为 0.0,boolean 初始化为 false, char 初始化为空字符 “”。
不同类型所占用的存储空间不同
基本类型 | 大小 |
---|---|
byte | 1 字节 |
char | 2 字节 |
short | 2 字节 |
int | 4 字节 |
long | 8 字节 |
float | 4 字节 |
double | 8 字节 |
Java 是一门面向对象的语言,但是基本类型是一个特例,在 Java SE5 中为基本类型提供了包装功能,将基本类型对应的引用类型称为包装器类型。可以将基本类型转换为对应的包装器类型,也可以在某些时候自动的将包装器类型转换为基本类型。基本类型和其对应的包装器类型对应如下:
基本类型 | 包装器类型 |
---|---|
boolean | Boolean |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
void | Void |
包装器对象可以进行和基本类型一样的操作,这是因为 Java SE5 的自动装箱和拆包机制,在需要的时候会将一个包装器对象转换为基本类型或者将一个基本类型封装成包装器对象。如下所示
1 | public class BasicAndWrapper { |
输出
1 | true |
可以看见包装器对象可以和基本类型进行算数运算和比较运算,但是有趣的是,就算创建两个完全相同的包装器对象,对它们使用 == 运算的结果也为 false。这是因为包装器对象和基本类型 == 运算时,会将包装器对象拆包成基本类型,这样比较的时候就相当于比较两个数值之间的比较,而两个类对象之间的 == 运算,比较的是两个类对象的地址,也就是查看两个类对象是否指向同一个区域。
引用类型
引用类型有五种:类,接口,数组,枚举,注解。
引用类型和基本类型不同,引用类型创建的变量称为引用,引用的值为对象,对象通过类创建。类是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。
类可以是 Java 预定义的类,也可以是自定义的类。
1 | public class MyClass { |
上述代码创建了一个简单的类,通过该类可以定义了一个引用,指向由该类创建的对象。
创建它们的语法格式如下
1 | MyClass myClass = new MyClass(); |
通过持有对象的引用,可以访问该对象的方法或者域。