我了解到==检查被比较的引用是否相同,而.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有相同的参考?
答案 0 :(得分:2)
equals方法是比较对象。当使用“==”来测试相等性时,它唯一能够按预期运行的时候是比较原始类型或本机类型,或者实际上是在测试两个指针是否指向同一个对象。也就是说,balance
很可能属于int
,float
或double
,这意味着“==”将按预期测试相等性。如果balance
的类型为Balance
,那么这将不起作用。
答案 1 :(得分:2)
引用也类似于原始类型以及int,chars和double,因为当你执行==时,你实际上是在比较这些类型的二进制表示。
答案 2 :(得分:1)
因为平衡可能是原始的,对吗?像int还是float?所以你要比较余额的价值。对于您正在比较引用的对象,但是使用基元来比较实际数据值
答案 3 :(得分:0)
如果此equals
方法有效,那么因为balance
和accountNumber
变量是原始类型,例如int
或double
和{{1比较基本类型的值。
答案 4 :(得分:0)
取决于什么是平衡。
如果balance
是基元,那么==
将比较这些值是正确的。
答案 5 :(得分:0)
==
来检查两个引用是否实际上是同一个对象。如果不是,则进一步检查以查看对象是否具有相同的状态。
答案 6 :(得分:0)
如果要比较balance / accountNumber的值,它们是基元或原始Wrappers(如Integer),那么==是您比较值的方式。包装器将被自动装箱。