我有一个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
。
可能出了什么问题?
尽管这两个值相同,但返回false。
在每天使用equals()
的数百万人中,你会是这个星球上第一个发现这个bug的人,这似乎很奇怪:-)
更有可能的是,年轻的学徒,你在某个地方犯了一个错误,他们实际上并不完全相同。
这可能是由许多因素引起的,例如大小写、与拉丁字母非常相似的非拉丁字符,或者字符串一端或另一端的空格。
如果您真的想知道它们是否不同,请尝试以下操作:
- 打印出长度
- 对于开头的每个子字符串(第一个字符、前两个字符等),比较两个字符串的等效部分
如果长度不相同,则可能包含空格。在这种情况下,您可能会考虑在比较之前使用String.trim()
来清理它。
如果你找到了一个不匹配的子字符串,那么你已经找到了导致问题的字符,你可以用类似String.codePointAt()
的东西来获得每个子字符串的代码点。