以下代码的最后四行究竟是做什么的?
class Money {
private int fAmount;
private String fCurrency;
public Money(int amount, String currency) {
fAmount = amount;
fCurrency = currency;
}
public int amount() { return fAmount; }
public String currency() { return fCurrency; }
public Money add(Money m) {
return new Money(amount() + m.amount(), currency());
}
public boolean equals(Object anObject) {
if (anObject instanceof Money) {
Money aMoney= (Money)anObject;
return aMoney.currency().equals(fCurrency) && aMoney.amount() == fAmount;
}
return false;
}
答案 0 :(得分:1)
他们检查两个货币对象是否相等。它检查传递给equals的参数是否确实是货币对象,然后检查值和货币是否相等
答案 1 :(得分:1)
if (anObject instanceof Money) {
对象是Money
对象吗? true
或false
Money aMoney= (Money)anObject;
该对象是Money
对象。将对象转换为Money
对象,以便我们可以访问所有类似Money的字段和方法
return aMoney.currency().equals(fCurrency) && aMoney.amount() == fAmount;
比较一些Money
内容并返回true
或false
return false;
该对象不是Money
对象。返回false
答案 2 :(得分:1)
我会从这里接受它:
public boolean equals(Object anObject) {
if (anObject instanceof Money) {
Money aMoney= (Money)anObject;
return aMoney.currency().equals(fCurrency) && aMoney.amount() == fAmount;
}
return false;
}
这里有一个方法。
public boolean equals(Object anObject) {
声明这个方法是publilc,应该返回一个布尔值,并将一个Object作为一个争论。
if (anObject instanceof Money) {
此行将作为参数传入的对象与您创建的名为Money的类进行比较。调用“instanceof”返回true或false,并确定Objecct是否是Money类的实例。
Money aMoney= (Money)anObject;
此行分配一部分内存,并将该空间中的Object标识为Class Money的对象。然后它将对象传递给Method并将其转换为Money类。仅当前一行(instanceof)返回true时才会发生这种情况。如果您在没有事先检查的情况下执行此操作,则可能会出现异常,例如,如果您传入了字符串。
return aMoney.currency().equals(fCurrency) && aMoney.amount() == fAmount;
现在您有一个Money类型的对象,您可以使用Money类中声明的方法。其中包括方法currency()
和amount()
。你在这里做的是将传入的对象中的货币值转换为某个常量值(fCurrencY),将amount()转换为其他值(fAmount)。您检查以确定它们的等效性,并将两个比较的结果与AND的真实结果一起返回。
您可以将此行重写为:
boolean currencyEqual = aMoney.currency().equals(fCurrency); // string and or object comparison for equivlance
boolean amount = aMoney.amount() == fAmount; // numeric comparison
boolean bothEqual = currencyEqual && amount; //boolean AND operation (1 && 1 = 1, 1&&0 = 0, 0 && 0 = 0)
return bothEqual;
最后一行:
return false;
仅在传入的参数不是Money的实例时运行,因此返回false。
有关instanceof的非常好的描述:
What is the 'instanceof' operator used for?
关于方法声明的讨论:
http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
用于继承树和转换:
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
答案 3 :(得分:0)
当比较非原始数据类型(不是int,double,boolean等)与==
时,您不是要比较它们的值,而是它们的引用。这意味着你基本上是在比较它们是否指向相同的内存块。要比较这些对象的值,您需要覆盖其类中的方法equals
。
您可以在示例代码中看到String也使用equals
,而不是==
,因为String也不是原始类型。