2017-03-22 7 views
-1

クラスのequals()メソッドを作成しようとしていますが、私の "if文"の最後の3行について次のエラーが発生しています。 modelNameとVinumberは継承されたプロパティです。誰かが私がここで間違っていることを教えてもらえますか?doubleをデリミティブにすることはできませんJavaはequalsメソッド

public boolean equals(FourByFour f){ 
    boolean status = false; 
    if (VINumber.equals(f.VINumber) && 
     modelName.equals(f.modelName) && 
     bayWidth.equals(f.bayWidth) && 
     bayHeight.equals(f.bayHeight) && 
     bayLength.equals(f.bayLength)) 
    { 
     status = true; 
    } 

    return status; 
} 
+0

(例えば2倍)。 '=='を使用してください。 – khelwood

+0

bayWidth、bayHeight、およびbayLengthはどのタイプですか? – Joe

+0

double型のようなプリミティブ型はメソッドを持たない – Jens

答えて

0

おそらく、bayWidth、bayHeight、およびbayLengthは2倍です。 doubleは参照型ではなくプリミティブであり、メソッドはありません。 equalsメソッドのdoubleプリミティブを比較するには、java.lang.Double.compareを使用します。

+0

私はそれを行うときにも同じエラーが発生しています –

1

サンプルコード

double z=100,x=100; 
System.out.println("z == x : "+ (z == x)); 
Double Z = new Double(z), X = new Double(x); 
System.out.println("Z.equals(X) : "+ Z.equals(X)+"\n(Z==X) : "+(Z==X)); 

出力:

z == x : true 
Z.equals(X) : true 
(Z==X) : false 

私は、この例では、物事がより明確になります願っています。

データ型としてプリミティブ(doubleなど)を使用する場合は.equalsを使用できません。 使用できる唯一の演算子は、==,!=,<,<=,>,>=です。 これらは、プリミティブ変数の値に基づいてそれらが表す比較結果のブール値を返します。

ただし、プリミティブ型のJavaラッパークラスを使用してオートボクシングを使用すると、==は可変アドレスを比較するのに対し、.equalsはデータ型の算術比較を行います。

0

あなたは.equalsメソッドのドキュメントに見れば、単にあなたが唯一の.equals

Stringのようなオブジェクト変数を比較することができます。

public boolean equals(Object anObject) 

パラメータ:

anObject - これを比較することを目的としストリングに対して。

double,floatまたはintのような他のプリミティブデータ型をオブジェクト変数ではないため、このメソッドを使用して比較することはできません。

あなたは==オペレータ

か、Double objectdoubleプリミティブ型を変換するために、Doubleクラスのコンストラクタを使用することができますし、それらを比較する必要があります。プリミティブ型を比較しようと `equals`を使用しないでください

Double bayWidthobj = new Double(bayWidth); 

Double bayHeightobj = new Double(bayHeight); 

Double bayLengthobj = new Double(bayLength); 
関連する問題