Java 有人能解释一下下面的代码是如何工作的吗

Java 有人能解释一下下面的代码是如何工作的吗,java,arrays,Java,Arrays,有人能解释一下下面代码片段的内部工作原理吗 ArrayList<Integer> a = new ArrayList<>(Arrays.asList(902,902)); System.out.println(a.get(0)+" "+a.get(1)+" "+(a.get(0) == a.get(1))); ArrayList<Integer> b = new ArrayList<>(Arrays.asList(11,11)); Syste

有人能解释一下下面代码片段的内部工作原理吗

ArrayList<Integer> a = new ArrayList<>(Arrays.asList(902,902));

System.out.println(a.get(0)+" "+a.get(1)+" "+(a.get(0) == a.get(1)));

ArrayList<Integer> b = new ArrayList<>(Arrays.asList(11,11));

System.out.println(b.get(0)+" "+b.get(1)+" "+(b.get(0) == b.get(1)));

为什么数字相等时第一个为假,第二个为真。

整数是装箱引用类型,不应使用
==
测试是否相等。它只适用于缓存的较小值,而不适用于较大值,因此
=
测试将失败。这些链接会告诉你细节。旁注:顺便提一下,这个问题的标题很糟糕,因为它没有给你问题的性质提供任何线索。你会希望标题以一种信息丰富的方式总结问题,就像报纸标题总结下面的文章一样。它只适用于较小的整数值-128到127。因此,一旦将值增加到128,它就会开始失败。Integer类主要为较小的值保留缓存。
902 902 false
11 11 true