一.定义
1.类似c的指针,引用类型存放的时对象的引用
2.引用变量再声明时被指定位一个特定的类型,一旦声明后,类型就不能被改变
3.引用类型包括:类,接口,数组,枚举,注解
4.所以的引用类型的默认值都是null
5.引用变量可以用来引用任何与之兼容的类型
二:类包装
包装类就是把基本数据类型和其辅助方法的封装到类中
包装类作用:
基本类型不是类,所以无法获得类的基本特性,无法参与转型、泛型、集合、反射等过程,包装类的出现就是为了你补这个缺陷
三包装类的拆装箱
包装类的装箱是指把基本类型装入包装类的过程,拆箱是从包装类对象中取出基本类型
Integer a = Integer.valueOf(5); // 装箱
int b = a.intValue(); // 拆箱
*自动拆装箱
Integer a = 5; //装箱
int b = a; // 拆箱*
自动拆装箱的弊端
由于包装类的拆装箱, 混用时很可能造成性能问题‘
Integer sum = 0;
for(int i=0; i< 1000; i++){
sum += 1;
}
一共执行了拆装箱1000次
3.1 当有更匹配的重载方法时,不自动拆装箱
public static void main(String[] args) {
fun(3);
fun(new Integer(3));
}
static void fun(int i){
System.out.println("Param is a int");
}
static void fun(Integer i){
System.out.println("Param is a Integer");
}
Param is a int
Param is a Integer
3.2 包装类的比较
包装类的比较使用equals() ==比较的时两个引用是否指向一个对象
常量池
包装类u的创建很浪费性能,因此java对简单数字(-128~127)对应的包装类进行了缓存,称为常量池
通过直接量赋值的包装类如果再此范围内,会直接使用常量池中的引用
Integer i1= 100;
Integer i2 = 100;
System.out.println(i1 == i2);
Integer i3 = new Integer(100);
System.out.println(i1 == i3);
true
false
包装类默认值为null, 自动拆装箱会报NullPointerException