以下程序运行结果是什么?
Integer a = -129;
Integer aa = -129;
Integer b = -128;
Integer bb = -128;
Integer c = 127;
Integer cc = 127;
Integer d = 128;
Integer dd = 128;
System.out.println(a == aa);
System.out.println(b == bb);
System.out.println(c == cc);
System.out.println(d == dd);
答案:false true true false
为什么相同数值有的为true,有的为false?
当==两边为基本类型(int)数据时比较的是两个值是否相等,当==两边为引用类型(Integer)数据时比较的是两个值的内存地址是否相等。
对于-128到127之间的数据,Integer有缓存机制。
首先会去缓存区查找是否存在这个范围内数据的对象,如果没有,则创建一个使用并放入到缓存区。如果有,则复用这个内存地址的数据。