0

重複の可能性:
==を使用するステートメントが予期しない結果をもたらす場合

こんにちは私はこのコードを使用してComboBoxに要素を追加していますが、空の要素を追加したくありません。コードは次のとおりです。

  public void elrendezesBetoltes(ArrayList<Elrendezes> ElrLista){
    int i;
    Elrendezes tmp;
    model.removeAllElements(); 
    model = new DefaultComboBoxModel(comboBoxItems);
    for(i=0; i<ElrLista.size(); i++){
         tmp = ElrLista.get(i);
         if(tmp.getName()!="")comboBoxItems.add(tmp.getName()); //not working
         addButton2(tmp.getSeatnum(),tmp.getCoord(),tmp.getFoglalt());
    }   
}

私の問題は、ifステートメントが機能しない場合でも、コンボボックスに空の名前が追加されることです。私は何が間違っているのですか?

4

7 に答える 7

1

メソッドを使用equalsして文字列を比較します。演算子を使用!=すると、文字列インスタンスを比較します。これは、それら(tmp.getName()と "")が同じ文字列インスタンスではないため、常にtrueになります。

変化する

      tmp.getName()!=""

      !"".equals(tmp.getName())

比較""して最初の文字列として配置すると、nullシナリオも処理されます。つまり、がの場合tmp.getName()は壊れませんnull

于 2012-11-27T15:34:07.510 に答える
1

文字列を比較するには、常にequalsメソッドを使用してください:-

if (tmp.getName()!="")

する必要があります:-

if (!tmp.getName().equals(""))

または、次のことを確認したい場合は、これを使用してくださいempty string:-

if (!tmp.getName().isEmpty()) {
    comboBoxItems.add(tmp.getName());
}
于 2012-11-27T15:32:43.047 に答える
0

Java 6になく、isEmptyが使用できない場合の別の代替手段は、次のとおりです。

if (tmp.getName.length()>0)

長さのチェックは、.equalsを使用するよりも高速であると考えられますが、tbhの潜在的なゲインは非常に小さいため、あまり心配する価値はありません。

于 2012-11-27T15:39:14.047 に答える
0

使用equals()

if (!tmp.getName().equals(""))

文字列の内容ではなく、文字列参照を使用==または比較します。!=これはほとんどあなたが望むものではありません。

于 2012-11-27T15:32:44.410 に答える
0

文字列を「等しい」と比較する必要があります。そうすれば機能します

if(!tmp.getName().equals(""))comboBoxItems.add(tmp.getName())
于 2012-11-27T15:33:02.903 に答える
0

ID(==、!=)を比較していますが、各Stringインスタンスは、等しい場合でも独自のIDを持っています。

だからあなたはする必要があります!tmp.getName().equals("")

一般に、定数文字列から始めることをお勧めします。これは、定数文字列がnullになることはないためです。!"".equals(tmp.getName())

ただし、apache commonslangStringUtilsを使用することをお勧めします。null処理とトリミングを処理するnotEmpty()andメソッドがあります。notBlank()

PS:文字列に対してIDが機能する場合があります。ただし、文字列の不変性によるコンパイラまたはjvmの最適化が原因であるため、これに依存しないでください。

于 2012-11-27T15:35:06.783 に答える
0

String#isEmpty()を使用する

if(!tmp.getName().isEmpty())

また:

if(!tmp.getName().equals(""))

常に、equalsメソッドで文字列の同等性を確認してください。==演算子は、2つの参照が同じStringオブジェクトを指しているかどうかのみをチェックします。

于 2012-11-27T15:35:11.590 に答える