我有一个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
。
可能出错?
答案 0 :(得分:2)
...虽然两个值相同,但返回false。
看起来很奇怪,你会成为这个星球上第一个发现这个错误的人,在每天使用equals()
的数百万人中间: - )
年轻的padawan,你更有可能在某个地方犯了错误,而且他们 实际上并不相同。
这可能是由许多事情引起的,例如大小写,非拉丁字符看起来非常类似于拉丁字母,或字符串一端或另一端的空格。
如果确实想知道他们是否有所不同,请尝试以下方法:
如果长度不相同,则可能涉及空格。在这种情况下,您可能会在比较之前使用String.trim()
进行清理。
如果你发现一个不匹配的子字符串,那么找到导致问题的字符,你可以用String.codePointAt()
之类的东西得到每个字符串的代码点。