public class IntegerTest { public static void main(String[] args) { Integer a1 = 100; Integer a2 = 100; System.out.println(a1==a2); //TODO:true Integer b1 = new Integer(100); Integer b2 =new Integer(100); System.out.println(b1==b2); //TODO:false Integer c1 = 150; Integer c2 = 150; System.out.println(c1==c2); //TODO:false Integer d1 =Integer.valueOf(100); Integer d2 =Integer.valueOf(100); System.out.println(d1==d2); //TODO:true System.out.println(a1==d1); //TODO:true } }
先说第一、三、四、五:a1和d1,java自动装箱技术的定义就是,在java5之后java 提供了这样的写法,a写法中省略写了d中的东西。
进入Integer.valueOf源码,发现底层已经写死了,在-128到127范围内已经被写在一个数组中了,相当于常量对象,所以说一、四、五是true,三超出了范 围,java会给每个数创建新的Integer对象。
再说二:进入底层,发现直接是新建对象,所以是False。