枚举和包装类
阅读代码,分析运行结果:
1 | public static void main(String[] args) { |
这段代码涉及到了Java中的自动装箱和拆箱的概念。
首先,我们需要了解Java中的整数缓存机制。Java中对于整数类型的缓存范围是在-128到127之间。当我们使用自动装箱将一个整数赋值给一个 Integer
对象时,如果该整数在缓存范围内,那么会直接返回缓存中的对象,而不会创建新的对象。
现在来分析代码:
1 | Integer i1 = 128; |
在这段代码中,我们分别创建了两个 Integer
对象 i1
和 i2
,并将它们都赋值为 128
。然后,我们创建了两个 int
类型的变量 i3
和 i4
,并同样赋值为 128
。
接下来,我们分别使用 ==
运算符进行比较。
第一个比较 i1 == i2
,由于 i1
和 i2
都是通过自动装箱得到的 Integer
对象,而且 128
不在整数缓存范围内,所以 i1
和 i2
引用的是不同的对象,因此比较结果为 false
。
第二个比较 i3 == i4
,由于 i3
和 i4
都是基本类型的 int
,直接进行数值比较,所以比较结果为 true
。
第三个比较 i1 == i3
,由于 i1
是 Integer
对象,而 i3
是基本类型的 int
,在比较时会进行自动拆箱,将 i1
转换为 int
类型。然后进行数值比较,所以比较结果为 true
。
总结起来,i1 == i2
的结果是 false
,i3 == i4
和 i1 == i3
的结果都是 true
。这是因为 Integer
对象的比较是通过自动拆箱后的数值比较来实现的。
阅读代码,分析运行结果:
1 | public static void main(String[] args) { |
这段代码涉及到了Java中的自动装箱和拆箱的概念,和包装类的缓存机制。Double和Float包装类没有缓存对象。所以(a==b)结果为true,(c==d)结果为false,(a==d)结果为true。