简介
Java中共有8种基本数据类型,其中4种表示整数,2种表示浮点数。1种表示字符,另外1种表示布尔类型。它们分别是:
它们的特点如下:
名称 | 关键字 | 占用字节数 | 取值范围 | 默认值 |
---|---|---|---|---|
字节型 | byte | 1 | − 2 7 -2^7 −27~ 2 7 − 1 2^7-1 27−1 | 0 |
短整型 | short | 2 | − 2 15 -2^{15} −215~ 2 15 − 1 2^{15}-1 215−1 | 0 |
整型 | int | 4 | − 2 31 -2^{31} −231~ 2 31 − 1 2^{31}-1 231−1 | 0 |
长整型 | long | 8 | − 2 63 -2^{63} −263~ 2 63 − 1 2^{63}-1 263−1 | 0L |
单精度浮点型 | float | 4 | +/-3.4E+38F | 0.0f |
双精度浮点型 | double | 8 | +/-1.8E+308 | 0.0d |
字符型 | char | 2 | \u0000~\uffff | \u0000 |
布尔型 | boolean | 基于虚拟机 | true/false | false |
包装类
在Java中,一切皆对象,但是基本数据类型并不能称之为对象。所以每一个基本数据类型都有一个包装类与之对应,下表是对应关系:
基本数据类型 | byte | short | int | long | float | double | char | boolean |
---|---|---|---|---|---|---|---|---|
包装类 | Byte | Short | Integer | Long | Float | Double | Character | Boolean |
装箱与拆箱
基本数据类型转换为包装类称之为装箱,包装类转换为基本数据类型称之为拆箱。装箱和拆箱的过程系统会帮我们自动完成,无需手动拆箱装箱。下面的代码展示的是装箱与拆箱。
int i = 4;
Integer j = i; // 自动装箱
int k = j; // 自动拆箱
int num = 12;
Integer numObject = new Integer(num); // 手动装箱
int numValue = numObject.intValue(); // 手动拆箱
扩展
char类型能表示汉字吗?
char是按照字符存储的,占用2个字节,用来储存Unicode字符。范围在0~65535。unicode编码字符集中包含了汉字,所以,char型变量中是可以存储汉字的。
char a = '张';
==和equals的区别?
==可以用来比较基本数据类型和引用类型,equals只能用来比较引用类型。
==在比较基本数据类型的时候,比较的是值是否相等;==在比较引用类型的时候,比较的是内存地址是否相等。
equals是Object类中的方法,其具体内容如下:
// Object的equals方法,直接使用==
public boolean equals(Object obj) {
return (this == obj);
}
可以看到,在Object类中equals方法使用的就是==,也就是比较内存地址是否相等。但是在一些类中,重写了equals方法,比如String类,String类的equals方法比较是字面量是否相等,代码如下:
// String的equals方法,比较的是字面量是否相等
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
以上源码均基于JDK1.8。