Integer a = 100;
Integer b = new Integer(100);
syso(a == b);
这段代码的结果是什么?
首先,Integer a = 100;会先进行装箱,调用Integer.valueOf()方法来获取他的Integer值,在valueOf中会看当前值是否在-127~128之间,如果是,则直接从cache中取出Integer对应的引用,如果不是,则创建一个对象。
但是Integer(100)却不会走这个过程,传递进去的值直接就赋值给了内部的value;
所以这段代码的结果是false!
Integer a = new Integer(100);
Integer b = new Integer(100);
syso(a == b);
这段代码的结果同样是false,因为没有走valueof的值判断过程,相当于是直接创建了两个对象,但是他俩在内存中的地址不同,所以结果是false!
Java的装箱拆箱类可以大体分为两个派别,下面我们进行一个归类:
Integer派别:Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。
Double派别:Double、Float的valueOf方法的实现是类似的。每次都返回不同的对象。
下面对Integer派别进行一个总结,如下图: