无法比较java中两个对象之间的相等性

时间:2013-09-24 22:13:25

标签: java

我一直遇到很多问题让这个项目正常工作但我目前仍然坚持让这个课程正常工作。它假设要做的是从无线电课中取出当前电台并将其传递给这个班级。问题是我正在尝试在AM和FM之间进行选择并显示当前电台。我不确定我是否正确使用了equals方法,因为它保持返回0.0,这是currentStation的默认值。

public class AutoRadioSystem
{

  private Radio selectedRadio;
  private AMRadio radioAM;
  private FMRadio radioFM; 
  private XMRadio radioXM;

  public AutoRadioSystem()
  {
    selectedRadio = new AMRadio();
  }
  public double getCurrentStation()
  {
    if (selectedRadio.equals(radioAM))
    {
      return radioAM.getCurrentStaion();
    }
    else if (selectedRadio.equals(radioFM))
    {
      return radioFM.getCurrentStaion();
    }
    return 0.0;
  }
  public void selectRadio()
  {
    //if (selectedRadio.equals(radioAM))
     // selectedRadio = radioFM;
  }
  public boolean equals (Object o)    
 {        
   if (o == null)           
     return false;        
   if (! (o instanceof AutoRadioSystem))           
     return false;       
   AutoRadioSystem other = (AutoRadioSystem) o;       
   return this.selectedRadio == other.selectedRadio;    
 }
  public static void main (String [] args) { 
    AutoRadioSystem c = new AutoRadioSystem();
    //c.selectRadio();
    double b = c.getCurrentStation();
    System.out.println(b);
  }
}

3 个答案:

答案 0 :(得分:2)

看起来你做错了(tm)。 Radio接口应公开getCurrentStaion()方法,该方法将由所有3个无线电类实现。然后,您的getCurrentStation()方法只需调用selectedRadio.getCurrentStation()并返回其结果。

此外,您正在AutoRadioSystem中实现equals()方法,该方法在比较Radio实例时无效。

答案 1 :(得分:1)

请注意,只需

private Radio selectedRadio;
private AMRadio radioAM;
private FMRadio radioFM; 
private XMRadio radioXM;

public AutoRadioSystem()
{
    selectedRadio = new AMRadio();
}
默认情况下,

radioAMradioFMradioXM都已初始化为null

equals()引用进行比较时,任何正确的false方法都会立即返回null。所以在这

public double getCurrentStation()
{
    if (selectedRadio.equals(radioAM))
    {
        return radioAM.getCurrentStaion();
    }
    else if (selectedRadio.equals(radioFM))
    {
        return radioFM.getCurrentStaion();
    }
    return 0.0;
}

if无法评估为true,您将获得返回0.0的最后一个案例。

除了正确实施equals()方法之外,您还需要正确初始化它们。

答案 2 :(得分:1)

Java中的对象在比较它们时有点不同,因为您可以通过两种方式比较对象。

  • 您可以使用==
  • 比较对象的引用
  • 您可以让自制方法使用o1.equals(o2) o1,o2作为对象进行自定义检查。

请注意o instanceof AutoRadioSystem如果false则返回o==null并且不会抛出NullPointerException。

PS:您在上一个问题中还有其他问题和答案。