1

我了解到 == 检查被比较的引用是否相同,而 .equals() 比较两个状态。那么为什么我们可以在 .equals() 方法中使用 == 呢?

例如:

public boolean equals(Object o){
        //cast o to SimpleBankAccount
        SimpleBankAccount b = (SimpleBankAccount)o;

        //check if all attributes are the same
        if ((this.balance == b.balance) && (this.accountNumber == b.accountNumber)){
            return true;
        }
        else{
            return false;
        }
    }

为什么 this.balance 和 b.balance 有相同的引用?

4

7 回答 7

2

equals 方法是比较对象。当使用“==”来测试相等性时,它会按预期运行的唯一时间是在比较原始类型或本机类型时,或者您实际上是在测试两个指针是否指向同一个对象。也就是说,balance很可能是类型intfloatdouble,这意味着“==”将按预期测试是否相等。如果balance是 type Balance,那么这将不起作用。

于 2013-03-04T18:32:38.007 回答
2

引用也类似于原始类型以及 int、chars 和 double,因为当您执行 == 时,您实际上是在比较这些类型的二进制表示。

于 2013-03-04T18:34:55.497 回答
1

因为平衡很可能是原始的,对吗?像int还是float?所以你正在比较余额的价值。使用对象比较引用,但使用基元比较实际数据值

于 2013-03-04T18:31:49.757 回答
0

如果此equals方法有效,那是因为balanceandaccountNumber变量是原始类型,例如intor double,并且==确实比较了原始类型的值。

于 2013-03-04T18:31:36.530 回答
0

取决于什么是平衡。

如果balance是原语,那么==将比较这些值,这是正确的。

于 2013-03-04T18:31:52.893 回答
0

==通常在 equals 方法中使用来检查两个引用是否实际上是同一个对象。如果不是,则进一步检查对象是否具有相同的状态。

于 2013-03-04T18:32:16.337 回答
0

如果您想比较 balance/accountNumber 的值并且它们是原语或原始包装器(如 Integer),那么 == 是您比较值的方式。包装器将被自动装箱。

于 2013-03-04T18:39:59.867 回答