2017-01-14 8 views
1

どのようにしてObjectクラスと比較できますか?オブジェクトクラスと比較するには?

私はそれは常に0.0を出力しますが、場合と、何も起こりません最後の他に

if ("0.0".equals(price) ||"0.0".equals(quantity))

if: (price.equals("0.0") ||quantity.equals("0.0"))

を試してみました!

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){for (int i = model1.getRowCount() - 1; i >= 0; i--) { 
     Object price = model1.getValueAt(i, tbl_order_detail.getColumnCount() - 8); 
     Object quantity = model1.getValueAt(i, tbl_order_detail.getColumnCount() - 11); 
     //if ("0.0".equals(price) ||"0.0".equals(quantity)) 
     if (price.equals("0.0") ||quantity.equals("0.0")) 
     { 
      model1.removeRow(i); 
      System.out.println("price&: "+price); 
      System.out.println("quantity&: "+quantity); 
     }else{ 
      System.out.println("price: "+price); 
      System.out.println("quantity: "+quantity); 
     } 
    } 
     }  
+3

'price'と' quantity'の型は何ですか?私はそれが 'String'ではなく何らかの型の' Number'だと思いますか?確認するには 'getClass()'を使います。 –

+2

あなたのモデルはその列のために何を保持していますか?文字列?二倍?そのような質問をするときに、私たちがコンパイルやテストできないスニペットを投稿するのはなぜですか?有効な[mcve]をコンパイル、実行、デバッグすることができる非常に小さなプログラムを作成して投稿するという価値ある努力をすることを検討してください。 –

+0

1)なぜオブジェクト型を使用するのですか? 2)あなたの条件は、 'price'がAなら' String'、Bは '' 0.0 ''ならば保持します。 – Moira

答えて

2

Javaでは、オブジェクトでequalsを呼び出すと、オブジェクトのIDが使用されます。 getQuantityとgetPriceの呼び出しがStringsを返さない限り、それらは等しくありません。私は、

1

ObjectStringDoubleクラスはすべて.equals()メソッドを持っているなど、あなたが生のオブジェクトを使用し、ダブルスに文字列を比較するようなことを行う必要がある場合、オーバーライドが等しいあなたのインスタンスの実際の型を使用していないことを示唆していますしかし、彼らは異なった働きをします。

Objectの場合、等価のためにオブジェクトのハッシュコード(一意のオブジェクトID)とクラスの比較が行われます。その比較は「これらはと同じオブジェクトですか?文字列クラスの

.equals()はあなたがString文字列または文字列リテラルを含むオブジェクト、または両者の組み合わせを比較しているかどうか、私はあなたが欲しいと思うものです文字列比較を行います。 JVMの内部で実際にstring interningが使用されています1つのコピーの文字列の値は、どのオブジェクト(またはリテラル表現)が参照されているかにかかわらず、文字列の値として格納されますが、やり直しています... String.equals()は文字列の値を比較して、それを知る必要があります。

Doubleクラスの場合、比較は数値です。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    for (int i = model1.getRowCount() - 1; i >= 0; i--) { 
     Object price = model1.getValueAt(i, tbl_order_detail.getColumnCount() - 8); 
     Object quantity = model1.getValueAt(i, tbl_order_detail.getColumnCount() - 11); 
     if (price instanceof String && quantity instanceof String) { 
      if (((String)price).equals("0.0") || ((String)quantity).equals("0.0")) { 
       model1.removeRow(i); 
       System.out.println("price&: "+price); 
       System.out.println("quantity&: "+quantity); 
      } else { 
       System.out.println("price: "+price); 
       System.out.println("quantity: "+quantity); 
      } 
     } 
    } 
}  

上記はmodel1.getValueAt()は、String型を返すと仮定すると、あなたが望むものと考えられます。特定の型を返すことが保証されていない場合は、の値を代入またはテストする前に返すオブジェクトの型をチェックして、正しい型にダウンキャストされていることを確認してください。

しかし、それは別の問題です。

+0

私はあなたの答えが好きですが、オブジェクトとnetbeansはStringにキャストするように求めています。私もfloatと同じものを試しました.. –

+0

getValueAt()はObjectを返すことを意味します。異なる型を返す。つまり、実行時にどのタイプが安全に戻っているかを知る必要があることを意味します。それが常にStringを返すわけではない場合、それが別の型のときにStringにキャストしようとすると例外がスローされます。私は答えを更新します。 – clearlight

+0

私は答えを更新しました。それはあなたに大まかなアイデアを与えるはずです。それが他の型を返すことができるなら、それらもチェックするために 'instanceof'を行う必要があります。私はこれを編集していませんが、うまくいくはずです。 – clearlight

1

私が試してみてください。

if(object1 == null || object2 == null) { 
model1.removeRows(); 
     } 

それはオブジェクトがnullと内容でない場合にのみ、しかし作品「0.0」ので、最終的に私は文字列にオブジェクトを変換し、ここで私がやったことです:

private void btn_clearActionPerformed(java.awt.event.ActionEvent evt) {           
    for (int i = model1.getRowCount() - 1; i >= 0; i--) { 
     Object price = model1.getValueAt(i, tbl_order_detail.getColumnCount() - 8); 
     Object quantity = model1.getValueAt(i, tbl_order_detail.getColumnCount() - 11); 

     String s1=price.toString(); 
     String s2=quantity.toString(); 
     //if ("0.0".equals(price) ||"0.0".equals(quantity)) 
     if (s1.equals("0.0") ||s2.equals("0.0")) 
     { 
      model1.removeRow(i); 
     } 
    } 
} 
+0

申し訳ありません、nevermind、Object *は '.toString()'メソッドを持っていますが、私は真剣にそれがあなたが望むものだと疑っています!それはStringの場合、Stringの内容ではなく、String形式でオブジェクトの名前を置くことと関係しています。文字列は特別なケースかもしれないので、私はそれをテストしますが、実行時にあなたが望むことはしないと思っています。 – clearlight

+0

など。文字列をログに記録するか、デバッガを使ってステップを進めて内容を確認してください – clearlight

+0

私はいつもSystem.outを使ってコードが動作しているかどうかをテストしています –

関連する問題