Google 具有相同内存地址的标记对象失败 == 比较
Google Marker Object With Same Memory Address Failing == Comparison
我有一些简单的代码用于检测触摸标记的时间。我有一个 GPSActivity
class 并且它同时包含 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");
}
}
}
我不明白的是比较器失败了。即使标记共享相同的内存地址,比较也会失败。你知道为什么吗?这是 "proves" activity.marker == marker
.
的日志
为什么内存地址相同的对象会比较失败?在这种情况下,他们的地址都是 34f45507
。
日志:
Marker Touch
Looking for
com.google.android.gms.maps.model.Marker@34f45507 against
com.google.android.gms.maps.model.Marker@34f45507
Did not find it
==
是参考比较。它检查对象是否指向相同的引用。 .equals()
计算对象中值的比较。
我有一些简单的代码用于检测触摸标记的时间。我有一个 GPSActivity
class 并且它同时包含 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");
}
}
}
我不明白的是比较器失败了。即使标记共享相同的内存地址,比较也会失败。你知道为什么吗?这是 "proves" activity.marker == marker
.
为什么内存地址相同的对象会比较失败?在这种情况下,他们的地址都是 34f45507
。
日志:
Marker Touch
Looking for com.google.android.gms.maps.model.Marker@34f45507 against com.google.android.gms.maps.model.Marker@34f45507
Did not find it
==
是参考比较。它检查对象是否指向相同的引用。 .equals()
计算对象中值的比较。