理解==和等于

时间:2013-03-04 18:30:07

标签: java equals equality

我了解到==检查被比较的引用是否相同,而.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有相同的参考?

7 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果此equals方法有效,那么因为balanceaccountNumber变量是原始类型,例如intdouble和{{1比较基本类型的值。

答案 4 :(得分:0)

取决于什么是平衡。

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

答案 5 :(得分:0)

通常在equals方法中使用

==来检查两个引用是否实际上是同一个对象。如果不是,则进一步检查以查看对象是否具有相同的状态。

答案 6 :(得分:0)

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