1、首先看下面这段代码
- public class Test1 {
-
- public static void main(String[] args) {
- Integer a = 10;
- Integer b = 10;
- System.out.println(a == b);
-
- Integer c = 128;
- Integer d = 128;
- System.out.println(c == d);
-
- Boolean b1 = true;
- Boolean b2 = true;
- System.out.println(b1 == b2);
-
- Float f1 = 1.23F;
- Float f2 = 1.23F;
- System.out.println(f1 == f2);
-
- }
- }
运行结果:
这时候很多小伙伴就奇怪了,同样是 Integer 怎么 10 相等,128就不相等呢
2、我们来看一下字节码
3、通过上面的分析,我们找到了 Integer.valueOf这个方法,然后进入源码如下:
从上面这个 if 可以看到 当数值在这个区间之内 返回的是 cache缓存中的对象,也就是同一个对象 == 比较时自然是 true
如果不在这个区间之内则是返回一个 new 新对象 那么 == 返回就是 false 了
4、然后看一下他区间的范围如下:
经过上面的分析 也就是 Integer 类型的数值比较 如果在 -128 ~ 127之间,同一个数值返回的是缓存中的同一个对象;如果不在这个区间之内,同一个数值返回的也是 new 的一个新对象,示例中另外两种情况类似。
萌新菜鸟一枚,不喜勿喷,谢谢。
感谢观看 !!!