不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
Java的包装类
Java 提供了 8 种基本数据类型及对应的 8 种包装数据类型。Java 是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的。
基本数据类型 | 包装类型 |
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
包装类的应用场景:
- 集合类泛型只能是包装类
//编译错误 List<int> list = new ArrayList<>(); //正常 List<Integer> list = new ArrayList<>();
- 成员变量不能有默认值
private int status;
假设规定 status 为0时为失败,这样 status 的默认值就为0,显然不可以,这样使用包装类 Integer,它的默认值为 null,所以就不会有默认值影响。
- 方法参数允许定义空值
private void test(int age){ System.out.println(age); }
方法参数定义的是基本数据类型 int,所以必须得传一个数字过来,不能传 null,很多场合我们希望是能传递 null 的,所以这种场合用包装类比较合适。
基本数据类型和包装类型的相互转换操作。
- 自动装箱:自动将基本数据类型转换成包装类型。
//自动装箱 Integer i = 8; //手动 Integer i1 = new Integer(8); 或 Integer i1 = Integer.valueOf(8);
自动装箱的原理就是调用包装类的 valueOf 方法。
- 自动拆箱:将包装类型转换成基本数据类型。
//自动拆箱 int i2 = i; //手动 int i3 = i.intValue();
自动装箱的原理就是调用包装类的 xxValue 方法。
注意:Integer,在 -128 ~ 127 范围内会有缓存。
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Integer i = new Integer(3); Integer i1 = new Integer(3); Integer i2 = 3; Integer i3 = 3; Integer i4 = 130; Integer i5 = 130; System.out.println(i == i1); System.out.println(i == i2); System.out.println(i2 == i3); System.out.println(i4 == i5); } }
程序输出:
false false true false
注意:
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Integer i = 129; Integer j = 129; System.out.println(i.equals(j)); // true System.out.println(i == j); // false } }