java - 为什么 SparseIntArray.equals(Object) 不起作用?

标签 java android equals sparse-array

我正在使用 SparseIntArray,我对这种行为感到困惑:

public static SparseIntArray getArray()
{
    SparseIntArray result = new SparseIntArray();
    result.append(0, 99);
    result.append(1, 988);
    result.append(2, 636);

    return result;
}

public static void testArray()
{
    SparseIntArray first = getArray();
    SparseIntArray second = getArray();
    if( first.equals(second) )
    {
        Log.v(TAG,"first "+first.toString()+" == second "+second.toString());           
    }
    else
    {
        Log.v(TAG,"first "+first.toString()+" != second "+second.toString());
    }
}

输出:

11-06 14:53:15.011: V/fileName(6709): first {0=99, 1=988, 2=636} != second {0=99, 1=988, 2=636}

我知道在两个对象之间使用 == 会比较对象地址,在这种情况下是不同的,但在这里我使用的是 SparseIntArray.equals(Object other) 并且预期的结果不是出乎意料。

我确信我可以推出自己的比较方法,但这听起来有点傻。如果我们不能依赖基类 Object.equals(Object other) 方法有什么意义?

谁能指出任何错误?

最佳答案

我刚刚搜索了SparseIntArray的代码。如果您指的是 android.util.SparseIntArray ,它不会覆盖 equals,这意味着它使用 Object 类的默认实现,该类比较引用。

What is the point for having a base class Object.equals(Object other) method if we cant rely on it?

实际上,您不能依赖基类 Object.equals,因为它恰恰做了您不想做的事情:

public boolean equals(Object obj) 
{
    return (this == obj);
}

由任何类的编写者决定是否覆盖 equals 并提供不同的实现。

关于java - 为什么 SparseIntArray.equals(Object) 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788431/

相关文章:

android - 从 CSV 文件中调用 aGraphEngine (Android) 的值

java - 为什么在这种情况下 equals 会返回 false?

java - 如何在 Java 中检测适当的字符串区域设置

java - 带有“确定”按钮的消息框错误 - 字符串被截断

java - 如何快速方便地创建单元素数组列表

C# UnitTest - 如果参数为 null,Assert.AreEqual() 不会调用 Equals

java - 覆盖等于不工作

java - 使用命令行参数将值注入(inject)spring

java - 如果不存在则插入,否则根据用户的选择更新 android

android - RecyclerView 项目有时无法正确显示,直到我滚动(仅在 Genymotion 平板电脑上)