这段代码有什么作用? (Java Collection)

时间:2014-12-20 18:08:34

标签: java collections

我一直在学习“用Java思考”。我找到了这段代码:

class SetType {
  int i;
  public SetType(int n) { i = n; }
  public boolean equals(Object o) {
    return o instanceof SetType && (i == ((SetType)o).i);
  }
  public String toString() { return Integer.toString(i); }
}

我无法理解这是做什么的:

i == ((SetType)o).i

我知道Object o被投放到SetType,但那是关于“.i”的? 如果有人明白这意味着它会很好。

4 个答案:

答案 0 :(得分:3)

它访问SetType类实例的“i”字段。

答案 1 :(得分:2)

.i正在访问该对象的成员变量i

答案 2 :(得分:1)

这里要理解的是,在一个表达式中完成了两件事。第一个对象o被强制转换为类SetType的对象,这是(SetType)o部分,然后访问此对象的字段i。将此视为以下两个步骤可能会有所帮助

SetType s = (SetType)o;
s.i;

请注意,强制转换是安全的,因为您首先测试o instanceof SetType,并且强制转换也是必要的,因为o是类Object的一个实例,因此不会有一个名为i的字段,即o.i不起作用。为了完整起见,这里是一个完全"扩展"您的代码版本:

public boolean equals(Object o) {
  if (o instanceof SetType) {
    SetType s = (SetType)o;
    return (i == s.i);
  }
  return false;
}

答案 3 :(得分:1)

此代码:

  public boolean equals(Object o) {
    return o instanceof SetType && (i == ((SetType)o).i);
  }

这是写同一件事的同等方式的缩写形式:

public boolean equals(Object o) {
    if (o instanceof SetType) {
        SetType other = (SetType) o;
        if (i == other.i) {
            return true;
        }
    }
    return false;
}

我希望你能更容易理解这一点。您可以简化此代码以达到原始代码。它们是等价的。