-  为什么有包装类? 
 在Java中,基本数据类型不是继承自Object,为了在泛型中可以支持基本数据类型,Java给每个基本数据类型都对应了一个包装类。【基本数据类型不符合面向对象思想,基本类型不是对象,从而基本数据类型都可以面向对象编程】
-  基本数据类型和对应的包装类 
| 基本数据类型 | 包装类 | 
|---|---|
| byte | Byte | 
| short | Short | 
| int | Integer | 
| long | Long | 
| char | Character | 
| double | Double | 
| float | Float | 
| boolean | Boolean | 
除了int和char对应的包装类Integer、Character,其余基本类型的包装类都是首字母大写。
- 自动装箱和拆箱
 ①自动装箱(基本数据类型变为对应的包装类型)
        int a = 10;
        Integer i = a;
        Integer j = (Integer)a;
        System.out.println(i);
        System.out.println(j);
    }
字节码文件:
 
 分析:自动装箱是在编译Integer i = a时会自动调用装箱方法Integer.valueOf(a)
②自动拆箱(包装类型变为对应的基本数据类型)
    public static void main(String[] args) {
        Integer i = 10;
        int a = i;
        int k = (int)i;
        System.out.println(a);
        System.out.println(k);
    }
字节码文件:
 
 分析:自动拆箱是在编译int b = i 时会自动调用拆箱方法i.intValue()
- 手动装箱和拆箱
 ①手动装箱的两种方法【调用valueOf方法,new包装类对象】
 ②手动拆箱的方法【调用intValue方法】
    public static void main(String[] args) {
        int i = 10;
        Integer j = Integer.valueOf(i);
        Integer k = new Integer(i);
        int m = j.intValue();
    }
- 分析下面代码的输出
public static void main(String[] args) {
	Integer a = 127;
	Integer b = 127;
	
	Integer c = 128;
	Integer d = 128;
	
	System.out.println(a == b);
	System.out.println(c == d);
}
输出:true false
 分析:此处涉及到自动装箱,因此底层会调用valueOf方法
 
 可以发现valueOf方法有2个返回值
 第一个返回值:low为-128,high为127,即传入的i值在-128到127之间会直接在cache缓存数组中返回数组元素下标值。
 i+(-(-128)) = i + 128; i取-128时,下标值为0;i取127时,下标值为256。
 缓存数组:
 
第二个返回值:不在if判断语句low和high的范围内,就会实例化新的对象。
因此:
 当值为127的时候,并没有new包装类对象,而是直接从数组的同一个下标中取值。
 当值为128的时候,new的包装类对象,则此时==号比较的时两个对象的地址。
















![[附源码]SSM计算机毕业设计网上书店管理系统JAVA](https://img-blog.csdnimg.cn/3308f9ff8273417c85674ccbd253c116.png)

