【问题标题】:String equals not working on Object字符串等于不在对象上工作
【发布时间】:2015-10-01 17:36:02
【问题描述】:
    Object[] abc = { "products" };
    methodName(model2, abc);

我初始化了一个对象并调用了方法:

public int methodName(TableModel model, Object value) {
    for (int i = model.getRowCount()-1; i >= 0; --i) {
    int j = 0; //first column I need

        System.out.println("a "+model.getValueAt(i, j)); //a products
        //this case RowCount was 1 (tested with println) which also means for loop is only once executed

        if (model.getValueAt(i, j).equals(value)) {
            return i;
        }
    }

return -1;
}

它总是返回 -1 尽管它应该返回 i (0)

那么为什么 .equals 不起作用

【问题讨论】:

  • 您正在尝试将单个元素(我猜)与数组进行比较。那永远不会返回 true...
  • 当您使用静态类型语言而不利用...类型系统时会发生这种情况

标签: java arrays string object netbeans


【解决方案1】:

您将一个数组作为第二个参数传递给methodName,然后检查该数组是否是equalsmodel.getValueAt(i, j)。无论model.getValueAt(i, j) 返回什么,它都不能是该数组的equals,因为数组使用比较对象引用的equals(来自Object 类)的默认实现。

【讨论】:

【解决方案2】:

所以不妨试试这个:

Object    abc = { "products" };

不要将abc 设为数组。

但如果它必须是大图中的数组,请将[...] 放在方法中的每个value 引用上。例如,value[0]

【讨论】:

  • 对象 abc = { "产品" }; = Object 的非法初始化 .... 无论如何 .equals(value[0]) 解决了它...非常感谢!
猜你喜欢
  • 2013-06-02
  • 1970-01-01
  • 2017-09-03
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2018-02-10
  • 1970-01-01
相关资源
最近更新 更多