最近看到书上有一段代码让写出输出结果:
Integer a = 1;
Integer b = 1;
System.out.println(a==b);
System.out.println(a.equals(b));
当时不假思索的就认为结果是false,true.
拿到机器上执行结果是true,true.
通过请教他人才知道,Integer回对(-128-127)区间的值进行缓存。说是这样在效率和空间上比构造方法更好。
Integer a = 128;
Integer b = 128;
System.out.println(a==b);
System.out.println(a.equals(b));
此时,结果就是false,true.
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a==b);
System.out.println(a.equals(b));
此时,结果是false,true.因为创建了两个对象。申请了两个不同的空间。