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方法来比较字符串:-

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

应该: -

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

或者干脆使用这个,如果你想检查empty string: -

if (!tmp.getName().isEmpty()) {
    comboBoxItems.add(tmp.getName());
}
于 2012-11-27T15:32:43.047 回答
1

使用equals方法比较字符串。通过使用!=运算符,您正在比较字符串实例,这总是正确的,因为它们(tmp.getName()和“”)不是相同的字符串实例。

改变

      tmp.getName()!=""

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

将作为第一个字符串放在""比较中也会照顾您的null情况,即它不会中断 if tmp.getName()is null

于 2012-11-27T15:34:07.510 回答
0

如果不在 Java 6 上并且 isEmpty 不可用,另一种选择是:

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

检查长度应该比使用 .equals 更快,尽管潜在收益非常小,不值得太担心。

于 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

您正在比较身份(==,!=),但每个 String 实例都有自己的身份,即使它们相等。

所以你需要做!tmp.getName().equals("")

通常,最好先从常量字符串开始,因为它永远不会为空:!"".equals(tmp.getName())

但是,我建议使用 apache commons lang StringUtils。它有一个notEmpty()andnotBlank()方法来处理空值处理和修剪。

PS:有时身份适用于字符串。但不应该依赖它,因为它是由编译器或 jvm 优化引起的,因为字符串不可变。

于 2012-11-27T15:35:06.783 回答
0

使用字符串#isEmpty()

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

或者:

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

始终使用 equals 方法检查字符串是否相等。== 运算符仅检查两个引用是否指向同一个 String 对象。

于 2012-11-27T15:35:11.590 回答