私はExperement.Iという名前のカスタムクラスを作成し、equalsメソッドとhashCodeオブジェクトのメソッドをオーバーライドしました。なぜequalsメソッドからfalseを取得するのですか?
アイデアは、クラスのフィールドを比較することであり、参照はデフォルトで動作しません。ここで
は私のカスタムExperementクラスは、(あなたがオーバーライドメソッドを見ることができる)である。
public class Experiment {
private DNAChain[] Chains; // Chains found in the experiment
private int counter; // next chain index
public DNAChain[] getChains() {
return Chains;
}
public void setChains(DNAChain[] chains) {
Chains = chains;
}
public Experiment (int n) {
Chains = new DNAChain[n];
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Experiment that = (Experiment)o;
if (counter != that.counter) return false;
//The two arrays are considered equal if
//both arrays contain the same number of elements, and all corresponding
//pairs of elements in the two arrays are equal
return Arrays.equals(Chains, that.Chains);
}
@Override
public int hashCode() {
int result = Arrays.hashCode(Chains);
result = 31 * result + counter;
return result;
}
}
そしてここでは、y DNAChainクラスです:
public class DNAChain {
private String Chain;
private boolean natural;
public String getChain() {
return Chain;
}
public DNAChain (String Chain, boolean natural) {
this.Chain = Chain;
this.natural = natural;
}
}
そして、ここでは主要な方法であり、私はオーバーライドされたequalsメソッドを呼び出しました:
public static void main(String[] args) {
DNAChain[] chainArr1 = new DNAChain[]{new DNAChain("agact",true),
new DNAChain("ctgacc",true)};
DNAChain[] chainArr2 = new DNAChain[]{new DNAChain("agact",true),
new DNAChain("ctgacc",true)};
Experiment experiment1 = new Experiment(5);
Experiment experiment2 = new Experiment(5);
experiment1.setChains(chainArr1);
experiment2.setChains(chainArr2);
boolean isEqueal = experiment1.equals(experiment2)
System.out.println(isEqueal);
}
私は、なぜこの行に理解することはできません。
boolean isEqueal = experiment1.equals(experiment2);
のisEqualはfalse
2しばらく実験インスタンスが同じプロパティ値を持っているのですか?
あなたは 'DNAChain'でequalsをオーバーライドしていないためです。 –
...または略して: '新しいDNAChain(" agact "、true).equals(新しいDNAChain(" agact "、true))== false'。 – dhke