【问题标题】:Google Marker Object With Same Memory Address Failing == Comparison具有相同内存地址的 Google 标记对象失败 == 比较
【发布时间】:2015-11-25 18:22:36
【问题描述】:

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

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

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

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

稍后,我处理一个触摸。我可以创建一个地图(字典),但由于任何时候地图上的标记都很少,因此只需迭代它们并检查匹配项就更简洁了。

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

private void onMarkerTouch(Marker marker) { 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

日志:

标记触摸

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

没找到

【问题讨论】:

  • 你试过marker.equals吗?
  • 是的,这行得通...为什么!?
  • 你如何比较String
  • 我想我得查一下 == vs equals 的用例

标签: java android google-maps marker


【解决方案1】:

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

【讨论】:

  • 这是对的,但让我困惑的是内存地址是一样的。因此它是相同的参考。 == 不应该工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 2013-12-26
  • 1970-01-01
  • 2012-08-08
  • 2023-03-07
  • 1970-01-01
  • 2022-08-02
相关资源
最近更新 更多