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")) {
}