枚举和包装类
阅读代码,分析运行结果:
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。