if语句不能过滤空名称

时间:2012-11-27 15:31:03

标签: java if-statement

  

可能重复:
  If statement using == gives unexpected result

您好我正在使用此代码向我的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语句不起作用,它仍然在我的组合框中添加空名称。我做错了什么?

7 个答案:

答案 0 :(得分:1)

始终使用equals方法比较字符串: -

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

应该是: -

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

或仅使用此,如果您要查看empty string: -

if (!tmp.getName().isEmpty()) {
    comboBoxItems.add(tmp.getName());
}

答案 1 :(得分:1)

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

更改

      tmp.getName()!=""

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

""作为第一个字符串进行比较将会处理您的null方案,即如果tmp.getName()null,则不会中断。

答案 2 :(得分:0)

使用equals()

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

使用==!=比较字符串引用,而不是字符串内容。这几乎不是你想要的。

答案 3 :(得分:0)

你必须将字符串与“等于”进行比较,然后才能正常工作

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

答案 4 :(得分:0)

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

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

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

但是,我建议使用apache commons lang StringUtils。它有notEmpty()notBlank()方法,可以处理空值处理和修剪。

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

答案 5 :(得分:0)

使用String#isEmpty()

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

OR:

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

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

答案 6 :(得分:0)

如果没有Java 6并且isEmpty不可用,则另一种选择是:

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

检查长度应该比使用.equals更快,尽管潜在的增益很小,不值得担心太多。