经常笔试的问题
    int i = 10;
    Integer i1 = 10;
    Integer i2 = 10;
    Integer i3 = new Integer(10);
    Integer i4 = new Integer(10);
    System.out.println(i==i1); //true
    System.out.println(i==i3); //true
    System.out.println(i1==i2); //true —->如果数字范围超过-128~127 则结果变为false
    System.out.println(i1==i3); //false
    System.out.println(i3==i4); //false
    System.out.println(i1.equals(i2)); //true
    System.out.println(i1.equals(i3)); //true
    System.out.println(i3.equals(i4)); //true

    1.==与equals()的区别
    ==可以比较基本数据类型 也可以比较引用数据类型(比较的都是变量中存储的内容)
    若比较的是基本类型 比较的是变量存储的值
    若比较的是引用类型 比较的是变量中存储的地址引用
    注意 不同类型引用的==比较 会出现编译错误 不能比较 如 Long 和 Integer 类型的值不能比较
    Integer是int的封装类 当Integer与int进行==比较时 Integer就会拆箱成一个int类型
    所以这里的Integer 不管是直接赋值 还是new创建的对象 只要跟int比较就会拆箱为int类型 所以就是相等的

    equals()只能比较引用类型
    是Object类中继承过来的方法 每一个引用类型都可以调用
    默认的equals()方法比较规则与==一致
    但是Integer类重写了equals()方法 equals方法先比较类型 如果类型相同 再比较数值

    2.Integer类加载的时候 自己有一个静态的空间
    空间内立即加载 Integer类型的数组Integer[] 数组内存储256个Integer对象 -128~127
    如果我们使用的对象范围在这之内 如Integer i1 = 10; 则直接在静态元素区里找对应的对象
    如果我们使用的对象范围不在这之内 如Integer i1 = 128; 则系统会帮我们创建一个新的Integer对象
    题目.png