SparseArray indexOfValue(Object)为相等变量返回不同的结果

时间:2016-11-02 16:08:27

标签: java android android-sparsearray

如下图所示,latLng等于latlng1,但indexOfValue()会返回不同的值。

为什么?

2 个答案:

答案 0 :(得分:1)

在内部,SparseArray将值保存在Objects的数组中。在indexOfValue(E value)方法中,value与数组元素by reference (not logical value)进行比较:

public int indexOfValue(E value) {
    for (int i = 0; i < mSize; i++)
        if (mValues[i] == value)
            return i;

    return -1;
}

变量latLnglatlng1引用内存中的不同对象,尽管它们在逻辑上是相等的。

答案 1 :(得分:0)

如果没有看到更多的代码,我的猜测是他们的lat / lng值是相同的,但是,它们不是同一个对象。如果在Google APIs the equal method中使用LatLng对象只是比较纬度和长值,而不是它们是同一个对象。

因此sparsearray只包含其中一个对象并返回-1,因为sparsearray中不存在另一个。