具有相同内存地址失败的Google Marker对象==比较

时间:2015-11-25 18:22:36

标签: java android google-maps marker

我有一些简单的代码用于检测触摸标记的时间。我有一个GPSActivity课程,它同时包含MakerOptions和{ Marker变量。

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

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

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

稍后,我处理了一下。我可以创建一个地图(字典),但因为地图上的标记很少,所以它更干净,只需迭代它们并检查匹配。

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

private void onMarkerTouch(标记标记) {     Timber.d(" Marker Touch");

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作为他们的地址。

日志:

  

Marker Touch

     

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

     

没找到它

1 个答案:

答案 0 :(得分:1)

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