返回

包装器类型比较是否相等:为什么用equals?

后端


在编程中,包装器类型(Wrapper classes)是用于表示基本数据类型的对象。它们提供了一种方法来将基本数据类型作为对象来操作。包装器类型具有与基本数据类型相同的值范围,但它们还具有其他功能,例如方法和属性。

包装器类型比较是否相等时,可以使用==运算符或equals()方法。==运算符比较的是包装器类型变量的值是否相等,而equals()方法比较的是包装器类型变量的引用是否相等。

为什么使用equals()?

使用equals()方法比较包装器类型变量是否相等的原因有很多。首先,equals()方法可以比较具有不同值的包装器类型变量是否相等。例如,以下代码使用==运算符比较两个具有不同值的Integer包装器类型变量:

Integer i1 = new Integer(10);
Integer i2 = new Integer(10);

if (i1 == i2) {
  System.out.println("i1 and i2 are equal");
} else {
  System.out.println("i1 and i2 are not equal");
}

输出:

i1 and i2 are not equal

如你所见,尽管i1和i2的值相同,但它们仍然不相等。这是因为==运算符比较的是包装器类型变量的引用,而不是它们的值。

相反,以下代码使用equals()方法比较具有不同值的Integer包装器类型变量:

Integer i1 = new Integer(10);
Integer i2 = new Integer(10);

if (i1.equals(i2)) {
  System.out.println("i1 and i2 are equal");
} else {
  System.out.println("i1 and i2 are not equal");
}

输出:

i1 and i2 are equal

如你所见,即使i1和i2的引用不同,它们仍然相等。这是因为equals()方法比较的是包装器类型变量的值,而不是它们的引用。

何时使用==运算符?

在某些情况下,可以使用==运算符来比较包装器类型变量是否相等。例如,如果要比较两个具有相同值的包装器类型变量是否相等,可以使用==运算符。这是因为==运算符可以快速确定包装器类型变量的值是否相等。

Integer i1 = new Integer(10);
Integer i2 = new Integer(10);

if (i1 == i2) {
  System.out.println("i1 and i2 are equal");
} else {
  System.out.println("i1 and i2 are not equal");
}

输出:

i1 and i2 are equal

在上面的代码中,i1和i2具有相同的值,因此==运算符可以快速确定它们相等。

结论

在比较包装器类型变量是否相等时,可以使用==运算符或equals()方法。==运算符比较的是包装器类型变量的引用,而equals()方法比较的是包装器类型变量的值。通常情况下,使用equals()方法比较包装器类型变量是否相等更为安全。