2014-10-19 76 views
-4

我有一个jtable和一个对象数组。在我的代码中,我使用for循环和getValueAt()将jtable的行值保存在此数组中。问题是,当我使用equals()比较此数组的值与字符串文字时,它返回false,但值相同。比较字符串与equals()不起作用

下面是其中i填充阵列中的代码:

public void mouseClicked(MouseEvent e) { 
      if (e.getClickCount() == 2) { 
       JTable target = (JTable) e.getSource(); 

       if ((target.getSelectedRow() >= 0) 
         && (target.getSelectedColumn() >= 0)) { 

        invoiceRow = target.getSelectedRow(); 
        invoiceCol = target.getModel().getColumnCount(); 
        invoiceId = (BigDecimal) returnedInvoiceTable 
          .getModel().getValueAt(invoiceRow, 0); 
       Object [] invoiceRowData = new Object[invoiceCol]; 

        for (int i = 0; i < invoiceCol; i++) { 
         invoiceRowData[i] = returnedInvoiceTable.getModel() 
           .getValueAt(invoiceRow, i); 

        } 

        fillReturned(); 
       } 
      } 
     } 
    }); 

和这是代码,其中i从与字符串文字

if (invoiceRowData[8].toString().equals("immediate")) { 

} 

阵列比较的值这返回false虽然两个值是相同的,而当我打印invoiceRowData[8].toString()它打印immediate

什么可能是错的?

+0

您可以在比较之前尝试修剪。 – VGaur 2014-10-19 09:15:06

+0

请显示您的'toString()'方法,以存储在invoiceRowData中的任何对象。 – Eran 2014-10-19 09:15:28

+0

现在它与trim()虽然我检查了字符串,发现它没有空格 – 2014-10-19 09:29:17

回答

2

...虽然两个值是相同的,但它返回false。

这似乎很奇怪,你将是这个星球上的第一人发现这个bug,即每天使用equals() :-)

最大的可能性是,年轻的学徒数以百万计的人中,你在某个地方犯了一个错误,他们是而不是其实相同。

这可能是由许多事情引起的,例如与非拉丁字母非常类似的非拉丁字符,或者字符串的一端或另一端的空格。

如果你真的想知道,如果他们是不同的,请尝试以下操作:

  • 打印出来的长度。
  • 对于开始处的每个子字符串(第一个字符,前两个字符等),比较两个字符串的等效部分。

如果长度不一致,则可能涉及空格。在这种情况下,你可能会考虑在比较之前使用String.trim()进行清理。

如果你发现一个不匹配的子字符串,那么找到引起问题的字符,并且你可以得到每个字符的代码点,如String.codePointAt()

+0

谢谢,我打印出的长度发现不一样,它与trim() – 2014-10-19 09:38:11