案例1:
1 | int a = 10; |
分析:
当Integer与int进行==比较时,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,这里的Integer,不管是直接赋值,还是new创建的对象,只要跟int比较就会拆箱为int类型,所以就是相等的
案例2:
1 | int b = -128; // 将-128赋值给b |
分析:
两个Integer==比较,由于都是对象类型,所以不会拆箱比较。
Integer i1 = -128;的第二步自动装箱时,要调用valueOf(),Integer作为常量时,对于-128到127之间的数,会进行缓存。第二次创建i2的时候,直接取出缓存,所以相等。而超出范围就是new了新对象了,所以不等。valueOf()
源码如下:
1 | public static Integer valueOf(int i) { |
案例3:
1 | Double d1 = 1.0; |
分析:valueOf()
源码如下:
1 | public static Double valueOf(String s) throws NumberFormatException { |
案例4:
1 | Integer integer = 128; |
分析:int c = integer;
自动拆箱,c赋值为10,当Integer与int进行==比较时,Integer就会拆箱成一个int类型。所以为true。
案例4:
1 | int d = 10; |
分析:
同理,这里都是常量的比较。
案例5:
1 | Integer integer6 = 128; |
分析:
一个对象类型,一个是常类,存放位置不同。