Java 将字符串与equals()进行比较不起作用

Java 将字符串与equals()进行比较不起作用,java,string,compare,equals,Java,String,Compare,Equals,我有一个jtable和一个对象数组。在我的代码中,我使用for循环和getValueAt()将jtable的行值保存在此数组中。问题是,当我使用equals()将此数组的值与字符串文字进行比较时,它返回false,尽管值相同 下面是我填充数组的代码: public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { JTable target = (JTable)

我有一个
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();
                }
            }
        }
    });
这将返回
false
,尽管这两个值相同,并且当我打印
invoiceRowData[8].toString()
时,它会打印
立即

有什么不对劲吗

。。。尽管两个值相同,但返回false

奇怪的是,在每天使用
equals()
的数百万人中,你是地球上第一个发现这个bug的人:-)

更可能的是,年轻的学徒,你在某个地方犯了一个错误,而他们实际上并不完全相同

这可能是由许多因素造成的,例如大小写、看起来非常类似于拉丁对应字符的非拉丁字符,或字符串一端或另一端的空格

如果您真的想知道它们是否不同,请尝试以下方法:

  • 把长度打印出来
  • 对于开头的每个子字符串(第一个字符、前两个字符等),比较两个字符串的等效部分
如果长度不相同,则可能涉及空格。在这种情况下,您可能会在比较之前考虑使用来清理它


如果您发现一个子字符串不匹配,那么您已经找到了导致问题的字符,并且您可以使用类似的方法获得每个字符的代码点。

您可以在比较之前尝试修剪。请为存储在invoiceRowData中的任何对象显示
toString()
方法。现在它可以使用trim()虽然我检查了字符串,发现它没有空格谢谢,但我打印出的长度不一样,它与trim()一起工作
if (invoiceRowData[8].toString().equals("immediate")) {

}