object+java+equals_java-为什么SparseIntArray.equals(Object)不起作用?
我正在使用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,sparse-array,java,android
来源: https://codeday.me/bug/20191029/1956520.html