2014-10-19 56 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