返回信息流public static void main(String[] args){
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
System.out.println(c==d);
System.out.println(e==f);
System.out.println(c==(a+b));
System.out.println(c.equals(a+b));
System.out.println(g==(a+b));
System.out.println(g.equals(a+b));
}
为什么第一个输出是true, 第二个输出是false。
如果== 没有遇到运算符的话,比较是否指向同一个对象,那1,2的输出感觉应该是一样的吧? 求解
这是一条镜像帖。来源:北邮人论坛 / java / #53605同步于 2016/10/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Java自动装箱求解
ywg557
2016/10/27镜像同步27 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
自动装箱是个语法糖,其实是调用Integer.valueOf()方法,你去看下jdk源码这个方法的实现就明白了,如楼上所说,缓存
发自「贵邮」
-128~127的整数会被保存在常量池中,所以b和c指向的是同一个对象,e和f是堆中的两个不同的对象。这跟自动拆箱没有关系
通过『我邮2.0』发布