我正在使用 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/