使用equals()比较String不起作用

时间:2014-10-19 09:11:23

标签: java string compare equals

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

下面是我填充数组的代码:

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();
                }
            }
        }
    });

这是我将数组中的值与字符串文字

进行比较的代码
if (invoiceRowData[8].toString().equals("immediate")) {

} 

这会返回false,但两个值相同,而当我打印invoiceRowData[8].toString()时,它会打印immediate

可能出错?

1 个答案:

答案 0 :(得分:2)

  

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

看起来很奇怪,你会成为这个星球上第一个发现这个错误的人,在每天使用equals()的数百万人中间: - )

年轻的padawan,你更有可能在某个地方犯了错误,而且他们 实际上并不相同。

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

如果确实想知道他们是否有所不同,请尝试以下方法:

  • 打印长度。
  • 对于开头的每个子字符串(第一个字符,前两个字符,依此类推),比较两个字符串的等效部分。

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

如果你发现一个不匹配的子字符串,那么找到导致问题的字符,你可以用String.codePointAt()之类的东西得到每个字符串的代码点。