0%

枚举和包装类案例分析

枚举和包装类

阅读代码,分析运行结果:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
Integer i1 = 128;
Integer i2 = 128;
int i3 = 128;
int i4 = 128;
System.out.println(i1 == i2);
System.out.println(i3 == i4);
System.out.println(i1 == i3);
}

这段代码涉及到了Java中的自动装箱和拆箱的概念。

首先,我们需要了解Java中的整数缓存机制。Java中对于整数类型的缓存范围是在-128到127之间。当我们使用自动装箱将一个整数赋值给一个 Integer 对象时,如果该整数在缓存范围内,那么会直接返回缓存中的对象,而不会创建新的对象。

现在来分析代码:

1
2
3
4
5
6
7
Integer i1 = 128;
Integer i2 = 128;
int i3 = 128;
int i4 = 128;
System.out.println(i1 == i2);
System.out.println(i3 == i4);
System.out.println(i1 == i3);

在这段代码中,我们分别创建了两个 Integer 对象 i1i2,并将它们都赋值为 128。然后,我们创建了两个 int 类型的变量 i3i4,并同样赋值为 128

接下来,我们分别使用 == 运算符进行比较。

第一个比较 i1 == i2,由于 i1i2 都是通过自动装箱得到的 Integer 对象,而且 128 不在整数缓存范围内,所以 i1i2 引用的是不同的对象,因此比较结果为 false

第二个比较 i3 == i4,由于 i3i4 都是基本类型的 int,直接进行数值比较,所以比较结果为 true

第三个比较 i1 == i3,由于 i1Integer 对象,而 i3 是基本类型的 int,在比较时会进行自动拆箱,将 i1 转换为 int 类型。然后进行数值比较,所以比较结果为 true

总结起来,i1 == i2 的结果是 falsei3 == i4i1 == i3 的结果都是 true。这是因为 Integer 对象的比较是通过自动拆箱后的数值比较来实现的。

阅读代码,分析运行结果:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
double a = 2.0;
double b = 2.0;
Double c = 2.0;
Double d = 2.0;
System.out.println(a == b);
System.out.println(c == d);
System.out.println(a == d);
}

这段代码涉及到了Java中的自动装箱和拆箱的概念,和包装类的缓存机制。Double和Float包装类没有缓存对象。所以(a==b)结果为true,(c==d)结果为false,(a==d)结果为true。

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道