具有相同内存地址的谷歌标记对象失败 == 比较



我有一些简单的代码来检测何时触摸标记。我有一个GPSActivity类,它包含MakerOptionsMarker变量。

当我将此GPSActivity添加到地图时,我这样做:

activity.marker = _map.addMarker(activity.markerOptions);

我只需将Marker添加到地图中,然后将地图创建的内容存储回GPSActivity

稍后,我处理触摸。我可以创建一个地图(字典(,但由于地图上随时出现的标记太少,因此迭代它们并检查匹配项更干净。

所以我只是在点击标记时这样做(注意:Timber只是一个记录器,所以假装它System.out.Log()(:

私人无效标记触摸(标记标记({ Timber.d("标记触摸"(;

for (GPSActivity activity:_totalActivitiesForToday)
{
    Timber.d("Looking for " + marker + " against " + activity.marker);
    if(activity.marker == marker)
    {
        Timber.d("FOUND IT");
    } else
    {
        Timber.d("Did not find it");
    }
}

}

我不明白的是比较器失败了。即使标记共享相同的内存地址,比较也会失败。你知道为什么吗?这是"证明"activity.marker == marker的日志.

当对象具有相同的内存地址时,为什么比较失败?在这种情况下,他们都以34f45507作为他们的地址。

日志:

标记触摸

寻找 反对com.google.android.gms.maps.model.Marker@34f45507 com.google.android.gms.maps.model.Marker@34f45507

没找到

==是一个

参考比较。它检查对象是否指向相同的引用。 .equals()计算对象中值的比较。

最新更新